# Copyright 2020 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
#
# Description:
#   XNNPACK - optimized floating-point neural network operators library

load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//lib:selects.bzl", "selects")
load(":build_defs.bzl", "xnnpack_aggregate_library", "xnnpack_benchmark", "xnnpack_binary", "xnnpack_cc_library", "xnnpack_gcc_std_copts", "xnnpack_min_size_copts", "xnnpack_msvc_std_copts", "xnnpack_optional_dnnl_copts", "xnnpack_optional_dnnl_deps", "xnnpack_optional_gemmlowp_copts", "xnnpack_optional_gemmlowp_deps", "xnnpack_optional_ruy_copts", "xnnpack_optional_ruy_deps", "xnnpack_optional_tflite_copts", "xnnpack_optional_tflite_deps", "xnnpack_std_cxxopts", "xnnpack_unit_test", "xnnpack_visibility")
load(":microkernels.bzl", "AARCH32_ASM_MICROKERNEL_SRCS", "AARCH64_ASM_MICROKERNEL_SRCS", "ALL_ARMSIMD32_MICROKERNEL_SRCS", "ALL_AVX2_MICROKERNEL_SRCS", "ALL_AVX512F_MICROKERNEL_SRCS", "ALL_AVX512SKX_MICROKERNEL_SRCS", "ALL_AVX512VBMI_MICROKERNEL_SRCS", "ALL_AVX_MICROKERNEL_SRCS", "ALL_F16C_MICROKERNEL_SRCS", "ALL_FMA3_MICROKERNEL_SRCS", "ALL_FMA_MICROKERNEL_SRCS", "ALL_FP16ARITH_MICROKERNEL_SRCS", "ALL_HEXAGON_MICROKERNEL_SRCS", "ALL_NEONBF16_AARCH64_MICROKERNEL_SRCS", "ALL_NEONBF16_MICROKERNEL_SRCS", "ALL_NEONDOT_MICROKERNEL_SRCS", "ALL_NEONFMA_AARCH64_MICROKERNEL_SRCS", "ALL_NEONFMA_MICROKERNEL_SRCS", "ALL_NEONFP16ARITH_AARCH64_MICROKERNEL_SRCS", "ALL_NEONFP16ARITH_MICROKERNEL_SRCS", "ALL_NEONFP16_MICROKERNEL_SRCS", "ALL_NEONV8_MICROKERNEL_SRCS", "ALL_NEON_AARCH64_MICROKERNEL_SRCS", "ALL_NEON_MICROKERNEL_SRCS", "ALL_RVV_MICROKERNEL_SRCS", "ALL_SCALAR_MICROKERNEL_SRCS", "ALL_SSE2_MICROKERNEL_SRCS", "ALL_SSE41_MICROKERNEL_SRCS", "ALL_SSE_MICROKERNEL_SRCS", "ALL_SSSE3_MICROKERNEL_SRCS", "ALL_WASMRELAXEDSIMD_MICROKERNEL_SRCS", "ALL_WASMSIMD_MICROKERNEL_SRCS", "ALL_WASM_MICROKERNEL_SRCS", "ALL_XOP_MICROKERNEL_SRCS", "WASM32_ASM_MICROKERNEL_SRCS")

licenses(["notice"])

exports_files(["LICENSE"])

OPERATOR_BENCHMARK_DEPS = [
    ":XNNPACK",
    ":bench_utils",
    ":cache",
    "@FP16",
]

MICROKERNEL_BENCHMARK_DEPS = [
    ":aligned_allocator",
    ":bench_microkernels",
    ":bench_utils",
    ":common",
    ":enable_assembly",
    ":microkernels_h",
    ":packing",
    ":params",
    ":microparams",
    ":microparams_init",
    ":xnnpack_h",
    "@FP16",
    "@cpuinfo",
]

ACCURACY_EVAL_DEPS = [
    ":aligned_allocator",
    ":bench_microkernels",
    ":bench_utils",
    ":common",
    ":isa_checks",
    ":math",
    ":math_stubs",
    "@FP16",
    "@cpuinfo",
    "@pthreadpool",
]

MICROKERNEL_TEST_DEPS = [
    ":aligned_allocator",
    ":allocator",
    ":common",
    ":enable_assembly",
    ":isa_checks",
    ":math",
    ":microkernels_h",
    ":microparams",
    ":microparams_init",
    ":params",
    ":requantization",
    ":test_microkernels",
    ":xnnpack_h",
    "@FP16",
]

OPERATOR_TEST_DEPS = [
    ":allocator",
    ":cache",
    ":common",
    ":params",
    ":XNNPACK_test_mode",
    ":jit_test_mode",
    ":normalization_test_mode",
    "@pthreadpool",
    "@FP16",
]

OPERATOR_SRCS = [
    "src/operator-delete.c",
    "src/operator-run.c",
    "src/operators/argmax-pooling-nhwc.c",
    "src/operators/average-pooling-nhwc.c",
    "src/operators/binary-elementwise-nd.c",
    "src/operators/channel-shuffle-nc.c",
    "src/operators/constant-pad-nd.c",
    "src/operators/convolution-nchw.c",
    "src/operators/convolution-nhwc.c",
    "src/operators/deconvolution-nhwc.c",
    "src/operators/dynamic-fully-connected-nc.c",
    "src/operators/fully-connected-nc.c",
    "src/operators/global-average-pooling-ncw.c",
    "src/operators/global-average-pooling-nwc.c",
    "src/operators/lut-elementwise-nc.c",
    "src/operators/max-pooling-nhwc.c",
    "src/operators/prelu-nc.c",
    "src/operators/resize-bilinear-nchw.c",
    "src/operators/resize-bilinear-nhwc.c",
    "src/operators/slice-nd.c",
    "src/operators/softmax-nc.c",
    "src/operators/transpose-nd.c",
    "src/operators/unary-elementwise-nc.c",
    "src/operators/unpooling-nhwc.c",
]

SUBGRAPH_SRCS = [
    "src/memory-planner.c",
    "src/runtime.c",
    "src/subgraph.c",
    "src/subgraph/abs.c",
    "src/subgraph/add2.c",
    "src/subgraph/argmax-pooling-2d.c",
    "src/subgraph/average-pooling-2d.c",
    "src/subgraph/bankers-rounding.c",
    "src/subgraph/ceiling.c",
    "src/subgraph/clamp.c",
    "src/subgraph/concatenate.c",
    "src/subgraph/convert.c",
    "src/subgraph/convolution-2d.c",
    "src/subgraph/copy.c",
    "src/subgraph/deconvolution-2d.c",
    "src/subgraph/depth-to-space.c",
    "src/subgraph/depthwise-convolution-2d.c",
    "src/subgraph/divide.c",
    "src/subgraph/elu.c",
    "src/subgraph/even-split.c",
    "src/subgraph/floor.c",
    "src/subgraph/fully-connected.c",
    "src/subgraph/global-average-pooling.c",
    "src/subgraph/global-sum-pooling.c",
    "src/subgraph/hardswish.c",
    "src/subgraph/leaky-relu.c",
    "src/subgraph/max-pooling-2d.c",
    "src/subgraph/maximum2.c",
    "src/subgraph/minimum2.c",
    "src/subgraph/multiply2.c",
    "src/subgraph/negate.c",
    "src/subgraph/prelu.c",
    "src/subgraph/sigmoid.c",
    "src/subgraph/softmax.c",
    "src/subgraph/space-to-depth-2d.c",
    "src/subgraph/square-root.c",
    "src/subgraph/square.c",
    "src/subgraph/squared-difference.c",
    "src/subgraph/static-constant-pad.c",
    "src/subgraph/static-reshape.c",
    "src/subgraph/static-resize-bilinear-2d.c",
    "src/subgraph/static-slice.c",
    "src/subgraph/static-transpose.c",
    "src/subgraph/subtract.c",
    "src/subgraph/tanh.c",
    "src/subgraph/unpooling-2d.c",
    "src/subgraph/validation.c",
    "src/tensor.c",
]

TABLE_SRCS = [
    "src/tables/exp2-k-over-64.c",
    "src/tables/exp2-k-over-2048.c",
    "src/tables/exp2minus-k-over-4.c",
    "src/tables/exp2minus-k-over-8.c",
    "src/tables/exp2minus-k-over-16.c",
    "src/tables/exp2minus-k-over-32.c",
    "src/tables/exp2minus-k-over-64.c",
    "src/tables/exp2minus-k-over-2048.c",
    "src/tables/vlog.c",
]

PROD_SCALAR_MICROKERNEL_SRCS = [
    "src/u8-lut32norm/u8-lut32norm-scalar.c",
    "src/xx-copy/xx-copy-scalar-memcpy.c",
    "src/xx-transpose/xx-transpose-1x1-scalar-memcpy.c",
    "src/x8-lut/gen/x8-lut-scalar-x4.c",
    "src/x24-transposec/gen/x24-transposec-1x2-scalar.c",
    "src/x32-packw/gen/x32-packw-x2-scalar-float-x4.c",
    "src/x32-packw/gen/x32-packw-x4-scalar-float-x4.c",
]

PROD_SCALAR_AARCH32_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-scalar-x4.c",
    "src/f32-argmaxpool/f32-argmaxpool-4x-scalar-c1.c",
    "src/f32-argmaxpool/f32-argmaxpool-9p8x-scalar-c1.c",
    "src/f32-argmaxpool/f32-argmaxpool-9x-scalar-c1.c",
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-scalar-c1.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-scalar-c1.c",
    "src/f32-conv-hwc/f32-conv-hwc-3x3s2p0p1c3x4-scalar-1x1.c",
    "src/f32-conv-hwc/f32-conv-hwc-3x3s2p1c3x4-scalar-1x1.c",
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-scalar-1x1.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-2f2m2l4c1s1r-minmax-scalar-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-scalar-4x1.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-scalar-2x1-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-scalar-2x1-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-scalar-2x1-acc2.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-scalar-fabsf-x2.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-scalar-x1.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-scalar-c1.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-scalar-c1.c",
    "src/f32-gemm/gen/f32-gemm-1x4-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-1x4-relu-scalar.c",
    "src/f32-gemm/gen/f32-gemm-1x4-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x2-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-relu-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-scalar.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-scalar-p4.c",
    "src/f32-ibilinear/gen/f32-ibilinear-scalar-c2.c",
    "src/f32-igemm/gen/f32-igemm-1x4-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-1x4-relu-scalar.c",
    "src/f32-igemm/gen/f32-igemm-1x4-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x2-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-relu-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-scalar.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-scalar-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-scalar-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-scalar-c1.c",
    "src/f32-prelu/gen/f32-prelu-scalar-2x4.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-scalar-imagic-x4.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-scalar-imagic-x4.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-scalar-rr2-p5-x4-acc2.c",
    "src/f32-rmax/f32-rmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x1-minmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x2-minmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x4-minmax-scalar.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-scalar-x2.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-scalar-x2.c",
    "src/f32-vbinary/gen/f32-vmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmaxc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmin-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vminc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-scalar-x2.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-scalar-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-scalar-x4.c",
    "src/f32-velu/gen/f32-velu-scalar-rr2-lut16-p3-x4.c",
    "src/f32-vhswish/gen/f32-vhswish-scalar-x4.c",
    "src/f32-vlrelu/gen/f32-vlrelu-scalar-x4.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c1-minmax-scalar-2x.c",
    "src/f32-vrelu/gen/f32-vrelu-scalar-x8.c",
    "src/f32-vrnd/gen/f32-vrndd-scalar-libm-x1.c",
    "src/f32-vrnd/gen/f32-vrndne-scalar-libm-x1.c",
    "src/f32-vrnd/gen/f32-vrndu-scalar-libm-x1.c",
    "src/f32-vrnd/gen/f32-vrndz-scalar-libm-x1.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-scalar-rr2-lut64-p2-div-x2.c",
    "src/f32-vsqrt/gen/f32-vsqrt-scalar-sqrt-x1.c",
    "src/f32-vtanh/gen/f32-vtanh-scalar-expm1minus-rr1-lut8-p4h3ts-div-x4.c",
    "src/f32-vunary/gen/f32-vabs-scalar-x4.c",
    "src/f32-vunary/gen/f32-vneg-scalar-x4.c",
    "src/f32-vunary/gen/f32-vsqr-scalar-x4.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p1c-minmax-fp32-scalar-fmagic.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p1c-minmax-fp32-scalar-fmagic.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p1c-minmax-fp32-scalar-fmagic.c",
    "src/qc8-gemm/gen/qc8-gemm-1x2-minmax-fp32-scalar-fmagic.c",
    "src/qc8-gemm/gen/qc8-gemm-2x2-minmax-fp32-scalar-fmagic.c",
    "src/qc8-igemm/gen/qc8-igemm-1x2-minmax-fp32-scalar-fmagic.c",
    "src/qc8-igemm/gen/qc8-igemm-2x2-minmax-fp32-scalar-fmagic.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p1c-minmax-fp32-scalar-fmagic.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p1c-minmax-fp32-scalar-fmagic.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-scalar-x4.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qs8-gemm/gen/qs8-gemm-1x2-minmax-fp32-scalar-fmagic.c",
    "src/qs8-gemm/gen/qs8-gemm-2x2-minmax-fp32-scalar-fmagic.c",
    "src/qs8-igemm/gen/qs8-igemm-1x2-minmax-fp32-scalar-fmagic.c",
    "src/qs8-igemm/gen/qs8-igemm-2x2-minmax-fp32-scalar-fmagic.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-scalar-x1.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-scalar-x1.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-scalar-x4.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-scalar-x4.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-scalar-x4.c",
    "src/qu8-avgpool/qu8-avgpool-9p8x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-avgpool/qu8-avgpool-9x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p1c-minmax-fp32-scalar-fmagic.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p1c-minmax-fp32-scalar-fmagic.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-scalar-x4.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-gemm/gen/qu8-gemm-1x2-minmax-fp32-scalar-fmagic.c",
    "src/qu8-gemm/gen/qu8-gemm-2x2-minmax-fp32-scalar-fmagic.c",
    "src/qu8-igemm/gen/qu8-igemm-1x2-minmax-fp32-scalar-fmagic.c",
    "src/qu8-igemm/gen/qu8-igemm-2x2-minmax-fp32-scalar-fmagic.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-scalar-x1.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-scalar-x1.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-scalar-x4.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-scalar-x4.c",
    "src/s8-ibilinear/gen/s8-ibilinear-scalar-c1.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-scalar-c1.c",
    "src/s8-vclamp/s8-vclamp-scalar-x4.c",
    "src/u8-ibilinear/gen/u8-ibilinear-scalar-c1.c",
    "src/u8-maxpool/u8-maxpool-9p8x-minmax-scalar-c1.c",
    "src/u8-rmax/u8-rmax-scalar.c",
    "src/u8-vclamp/u8-vclamp-scalar-x4.c",
    "src/xx-fill/xx-fill-scalar-x16.c",
    "src/xx-pad/xx-pad-scalar.c",
    "src/x8-transposec/gen/x8-transposec-2x4-scalar-int.c",
    "src/x8-zip/x8-zip-xm-scalar.c",
    "src/x8-zip/x8-zip-x2-scalar.c",
    "src/x8-zip/x8-zip-x3-scalar.c",
    "src/x8-zip/x8-zip-x4-scalar.c",
    "src/x16-transposec/gen/x16-transposec-2x4-scalar-int.c",
    "src/x32-packx/x32-packx-x2-scalar.c",
    "src/x32-packx/x32-packx-x3-scalar.c",
    "src/x32-packx/x32-packx-x4-scalar.c",
    "src/x32-transposec/gen/x32-transposec-2x4-scalar-int.c",
    "src/x32-unpool/x32-unpool-scalar.c",
    "src/x32-zip/x32-zip-xm-scalar.c",
    "src/x32-zip/x32-zip-x2-scalar.c",
    "src/x32-zip/x32-zip-x3-scalar.c",
    "src/x32-zip/x32-zip-x4-scalar.c",
]

PROD_SCALAR_WASM_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-scalar-x1.c",
    "src/f32-argmaxpool/f32-argmaxpool-4x-scalar-c1.c",
    "src/f32-argmaxpool/f32-argmaxpool-9p8x-scalar-c1.c",
    "src/f32-argmaxpool/f32-argmaxpool-9x-scalar-c1.c",
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-scalar-c1.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-scalar-c1.c",
    "src/f32-conv-hwc/f32-conv-hwc-3x3s2p0p1c3x4-scalar-1x1.c",
    "src/f32-conv-hwc/f32-conv-hwc-3x3s2p1c3x4-scalar-1x1.c",
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-scalar-1x1.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l1c1s1r-minmax-wasm.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-scalar-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-scalar-2x1-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-scalar-1x1-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-scalar-1x1-acc5.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-scalar-1x1-acc5.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-scalar-bitcast-x4.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-scalar-x1.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-scalar-c1.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-scalar-c1.c",
    "src/f32-gemm/gen/f32-gemm-1x4-scalar.c",
    "src/f32-gemm/gen/f32-gemm-2x4-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-2x4-relu-scalar.c",
    "src/f32-gemm/gen/f32-gemm-2x4-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x2-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-scalar.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-scalar-p4.c",
    "src/f32-ibilinear/gen/f32-ibilinear-scalar-c2.c",
    "src/f32-igemm/gen/f32-igemm-1x4-scalar.c",
    "src/f32-igemm/gen/f32-igemm-2x4-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-2x4-relu-scalar.c",
    "src/f32-igemm/gen/f32-igemm-2x4-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x2-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-scalar.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-scalar-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-scalar-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-scalar-c1.c",
    "src/f32-prelu/gen/f32-prelu-scalar-2x4.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-scalar-imagic-x1.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-scalar-imagic-x1.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-scalar-rr2-p5-x4-acc2.c",
    "src/f32-rmax/f32-rmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x1-minmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x2-minmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x4-minmax-scalar.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmaxc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmin-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vminc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-scalar-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-scalar-x4.c",
    "src/f32-velu/gen/f32-velu-scalar-rr2-lut16-p3-x2.c",
    "src/f32-vhswish/gen/f32-vhswish-scalar-x4.c",
    "src/f32-vlrelu/gen/f32-vlrelu-scalar-x4.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c1-minmax-scalar-2x.c",
    "src/f32-vrelu/gen/f32-vrelu-scalar-x8.c",
    "src/f32-vrnd/gen/f32-vrndd-scalar-libm-x4.c",
    "src/f32-vrnd/gen/f32-vrndne-scalar-libm-x4.c",
    "src/f32-vrnd/gen/f32-vrndu-scalar-libm-x4.c",
    "src/f32-vrnd/gen/f32-vrndz-scalar-libm-x4.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-scalar-rr2-lut64-p2-div-x2.c",
    "src/f32-vsqrt/gen/f32-vsqrt-scalar-sqrt-x1.c",
    "src/f32-vtanh/gen/f32-vtanh-scalar-expm1minus-rr1-lut8-p4h3ts-div-x4.c",
    "src/f32-vunary/gen/f32-vabs-scalar-x4.c",
    "src/f32-vunary/gen/f32-vneg-scalar-x4.c",
    "src/f32-vunary/gen/f32-vsqr-scalar-x4.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p2c-minmax-fp32-scalar-imagic.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p2c-minmax-fp32-scalar-imagic.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p1c-minmax-fp32-scalar-imagic.c",
    "src/qc8-gemm/gen/qc8-gemm-1x2-minmax-fp32-scalar-imagic.c",
    "src/qc8-gemm/gen/qc8-gemm-2x2-minmax-fp32-scalar-imagic.c",
    "src/qc8-igemm/gen/qc8-igemm-1x2-minmax-fp32-scalar-imagic.c",
    "src/qc8-igemm/gen/qc8-igemm-2x2-minmax-fp32-scalar-imagic.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p2c-minmax-fp32-scalar-imagic.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p1c-minmax-fp32-scalar-imagic.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-scalar-x1.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-fp32-scalar-imagic-c4.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-fp32-scalar-imagic-c4.c",
    "src/qs8-gemm/gen/qs8-gemm-1x2-minmax-fp32-scalar-imagic.c",
    "src/qs8-gemm/gen/qs8-gemm-2x2-minmax-fp32-scalar-imagic.c",
    "src/qs8-igemm/gen/qs8-igemm-1x2-minmax-fp32-scalar-imagic.c",
    "src/qs8-igemm/gen/qs8-igemm-2x2-minmax-fp32-scalar-imagic.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-scalar-x4.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-scalar-x4.c",
    "src/qs8-vcvt/gen/qs8-vcvt-scalar-x1.c",
    "src/qs8-vcvt/gen/qs8-vcvt-scalar-x4.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-scalar-andxor-x4.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-scalar-select-x4.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-scalar-x4.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-scalar-x4.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-scalar-x4.c",
    "src/qu8-avgpool/qu8-avgpool-9p8x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-avgpool/qu8-avgpool-9x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p2c-minmax-fp32-scalar-imagic.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p1c-minmax-fp32-scalar-imagic.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-scalar-x1.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-fp32-scalar-imagic-c4.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-fp32-scalar-imagic-c4.c",
    "src/qu8-gemm/gen/qu8-gemm-1x2-minmax-fp32-scalar-imagic.c",
    "src/qu8-gemm/gen/qu8-gemm-2x2-minmax-fp32-scalar-imagic.c",
    "src/qu8-igemm/gen/qu8-igemm-1x2-minmax-fp32-scalar-imagic.c",
    "src/qu8-igemm/gen/qu8-igemm-2x2-minmax-fp32-scalar-imagic.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-scalar-x4.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-scalar-x4.c",
    "src/qu8-vcvt/gen/qu8-vcvt-scalar-x1.c",
    "src/qu8-vcvt/gen/qu8-vcvt-scalar-x4.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-scalar-andxor-x4.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-scalar-select-x4.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-scalar-x4.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-scalar-x4.c",
    "src/s8-ibilinear/gen/s8-ibilinear-scalar-c1.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-scalar-c1.c",
    "src/s8-vclamp/s8-vclamp-scalar-x4.c",
    "src/u8-ibilinear/gen/u8-ibilinear-scalar-c1.c",
    "src/u8-maxpool/u8-maxpool-9p8x-minmax-scalar-c1.c",
    "src/u8-rmax/u8-rmax-scalar.c",
    "src/u8-vclamp/u8-vclamp-scalar-x4.c",
    "src/xx-fill/xx-fill-scalar-x16.c",
    "src/xx-pad/xx-pad-scalar.c",
    "src/x8-lut/gen/x8-lut-scalar-x1.c",
    "src/x8-transposec/gen/x8-transposec-2x4-scalar-int.c",
    "src/x8-zip/x8-zip-xm-scalar.c",
    "src/x8-zip/x8-zip-x2-scalar.c",
    "src/x8-zip/x8-zip-x3-scalar.c",
    "src/x8-zip/x8-zip-x4-scalar.c",
    "src/x16-transposec/gen/x16-transposec-2x4-scalar-int.c",
    "src/x32-packx/x32-packx-x2-scalar.c",
    "src/x32-packx/x32-packx-x3-scalar.c",
    "src/x32-packx/x32-packx-x4-scalar.c",
    "src/x32-transposec/gen/x32-transposec-2x4-scalar-int.c",
    "src/x32-unpool/x32-unpool-scalar.c",
    "src/x32-zip/x32-zip-xm-scalar.c",
    "src/x32-zip/x32-zip-x2-scalar.c",
    "src/x32-zip/x32-zip-x3-scalar.c",
    "src/x32-zip/x32-zip-x4-scalar.c",
]

PROD_SCALAR_RISCV_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-scalar-x4.c",
    "src/f32-argmaxpool/f32-argmaxpool-4x-scalar-c1.c",
    "src/f32-argmaxpool/f32-argmaxpool-9p8x-scalar-c1.c",
    "src/f32-argmaxpool/f32-argmaxpool-9x-scalar-c1.c",
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-scalar-c1.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-scalar-c1.c",
    "src/f32-conv-hwc/f32-conv-hwc-3x3s2p0p1c3x4-scalar-1x1.c",
    "src/f32-conv-hwc/f32-conv-hwc-3x3s2p1c3x4-scalar-1x1.c",
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-scalar-1x1.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-minmax-scalar-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-scalar-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-scalar-2x1-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-scalar-1x1-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-scalar-1x1-acc5.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-scalar-1x1-acc5.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-scalar-fabsf-x2.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-scalar-x1.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-scalar-c1.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-scalar-c1.c",
    "src/f32-gemm/gen/f32-gemm-1x4-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-1x4-relu-scalar.c",
    "src/f32-gemm/gen/f32-gemm-1x4-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x2-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-minmax-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-relu-scalar.c",
    "src/f32-gemm/gen/f32-gemm-4x4-scalar.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-scalar-p4.c",
    "src/f32-ibilinear/gen/f32-ibilinear-scalar-c2.c",
    "src/f32-igemm/gen/f32-igemm-1x4-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-1x4-relu-scalar.c",
    "src/f32-igemm/gen/f32-igemm-1x4-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x2-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-minmax-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-relu-scalar.c",
    "src/f32-igemm/gen/f32-igemm-4x4-scalar.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-scalar-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-scalar-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-scalar-c1.c",
    "src/f32-prelu/gen/f32-prelu-scalar-2x4.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-scalar-lrintf-x4.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-scalar-lrintf-x4.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-scalar-rr2-p5-x4-acc2.c",
    "src/f32-rmax/f32-rmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x1-minmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x2-minmax-scalar.c",
    "src/f32-spmm/gen/f32-spmm-8x4-minmax-scalar.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-scalar-x2.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-scalar-x2.c",
    "src/f32-vbinary/gen/f32-vmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmaxc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmin-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vminc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-scalar-x2.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-scalar-x8.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-scalar-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-scalar-x4.c",
    "src/f32-velu/gen/f32-velu-scalar-rr2-lut16-p3-x4.c",
    "src/f32-vhswish/gen/f32-vhswish-scalar-x4.c",
    "src/f32-vlrelu/gen/f32-vlrelu-scalar-x4.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c1-minmax-scalar-2x.c",
    "src/f32-vrelu/gen/f32-vrelu-scalar-x8.c",
    "src/f32-vrnd/gen/f32-vrndd-scalar-libm-x1.c",
    "src/f32-vrnd/gen/f32-vrndne-scalar-libm-x1.c",
    "src/f32-vrnd/gen/f32-vrndu-scalar-libm-x1.c",
    "src/f32-vrnd/gen/f32-vrndz-scalar-libm-x1.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-scalar-rr2-lut64-p2-div-x2.c",
    "src/f32-vsqrt/gen/f32-vsqrt-scalar-sqrt-x1.c",
    "src/f32-vtanh/gen/f32-vtanh-fma-expm1minus-rr1-lut8-p4h3ts-div-x4.c",
    "src/f32-vunary/gen/f32-vabs-scalar-x4.c",
    "src/f32-vunary/gen/f32-vneg-scalar-x4.c",
    "src/f32-vunary/gen/f32-vsqr-scalar-x4.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p2c-minmax-fp32-scalar-lrintf.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p2c-minmax-fp32-scalar-lrintf.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p2c-minmax-fp32-scalar-lrintf.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4-minmax-fp32-scalar-lrintf.c",
    "src/qc8-gemm/gen/qc8-gemm-3x4-minmax-fp32-scalar-lrintf.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4-minmax-fp32-scalar-lrintf.c",
    "src/qc8-igemm/gen/qc8-igemm-3x4-minmax-fp32-scalar-lrintf.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p2c-minmax-fp32-scalar-lrintf.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p2c-minmax-fp32-scalar-lrintf.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-scalar-x4.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4-minmax-fp32-scalar-lrintf.c",
    "src/qs8-gemm/gen/qs8-gemm-3x4-minmax-fp32-scalar-lrintf.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4-minmax-fp32-scalar-lrintf.c",
    "src/qs8-igemm/gen/qs8-igemm-3x4-minmax-fp32-scalar-lrintf.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-scalar-x4.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-scalar-x4.c",
    "src/qs8-vcvt/gen/qs8-vcvt-scalar-x4.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-scalar-andxor-x4.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-scalar-x4.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-scalar-x4.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-scalar-x4.c",
    "src/qu8-avgpool/qu8-avgpool-9p8x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-avgpool/qu8-avgpool-9x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p2c-minmax-fp32-scalar-lrintf.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p2c-minmax-fp32-scalar-lrintf.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-scalar-x4.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-fp32-scalar-imagic-c1.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4-minmax-fp32-scalar-lrintf.c",
    "src/qu8-gemm/gen/qu8-gemm-3x4-minmax-fp32-scalar-lrintf.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4-minmax-fp32-scalar-lrintf.c",
    "src/qu8-igemm/gen/qu8-igemm-3x4-minmax-fp32-scalar-lrintf.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-scalar-x4.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-scalar-x4.c",
    "src/qu8-vcvt/gen/qu8-vcvt-scalar-x4.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-scalar-andxor-x4.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-scalar-x4.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-scalar-x4.c",
    "src/s8-ibilinear/gen/s8-ibilinear-scalar-c1.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-scalar-c1.c",
    "src/s8-vclamp/s8-vclamp-scalar-x4.c",
    "src/u8-ibilinear/gen/u8-ibilinear-scalar-c1.c",
    "src/u8-maxpool/u8-maxpool-9p8x-minmax-scalar-c1.c",
    "src/u8-rmax/u8-rmax-scalar.c",
    "src/u8-vclamp/u8-vclamp-scalar-x4.c",
    "src/xx-fill/xx-fill-scalar-x16.c",
    "src/xx-pad/xx-pad-scalar.c",
    "src/x8-transposec/gen/x8-transposec-2x4-scalar-int.c",
    "src/x8-zip/x8-zip-xm-scalar.c",
    "src/x8-zip/x8-zip-x2-scalar.c",
    "src/x8-zip/x8-zip-x3-scalar.c",
    "src/x8-zip/x8-zip-x4-scalar.c",
    "src/x16-transposec/gen/x16-transposec-2x4-scalar-int.c",
    "src/x32-packx/x32-packx-x2-scalar.c",
    "src/x32-packx/x32-packx-x3-scalar.c",
    "src/x32-packx/x32-packx-x4-scalar.c",
    "src/x32-transposec/gen/x32-transposec-2x4-scalar-int.c",
    "src/x32-unpool/x32-unpool-scalar.c",
    "src/x32-zip/x32-zip-xm-scalar.c",
    "src/x32-zip/x32-zip-x2-scalar.c",
    "src/x32-zip/x32-zip-x3-scalar.c",
    "src/x32-zip/x32-zip-x4-scalar.c",
]

PROD_ARMSIMD32_MICROKERNEL_SRCS = [
    "src/qc8-gemm/gen/qc8-gemm-1x2c4-minmax-fp32-armsimd32.c",
    "src/qc8-gemm/gen/qc8-gemm-2x2c4-minmax-fp32-armsimd32.c",
    "src/qc8-igemm/gen/qc8-igemm-1x2c4-minmax-fp32-armsimd32.c",
    "src/qc8-igemm/gen/qc8-igemm-2x2c4-minmax-fp32-armsimd32.c",
    "src/qs8-gemm/gen/qs8-gemm-1x2c4-minmax-fp32-armsimd32.c",
    "src/qs8-gemm/gen/qs8-gemm-2x2c4-minmax-fp32-armsimd32.c",
    "src/qs8-igemm/gen/qs8-igemm-1x2c4-minmax-fp32-armsimd32.c",
    "src/qs8-igemm/gen/qs8-igemm-2x2c4-minmax-fp32-armsimd32.c",
    "src/qs8-vcvt/gen/qs8-vcvt-armsimd32-x8.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-armsimd32-x4.c",
    "src/qu8-gemm/gen/qu8-gemm-1x2c4-minmax-fp32-armsimd32.c",
    "src/qu8-gemm/gen/qu8-gemm-2x2c4-minmax-fp32-armsimd32.c",
    "src/qu8-igemm/gen/qu8-igemm-1x2c4-minmax-fp32-armsimd32.c",
    "src/qu8-igemm/gen/qu8-igemm-2x2c4-minmax-fp32-armsimd32.c",
    "src/qu8-vcvt/gen/qu8-vcvt-armsimd32-x8.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-armsimd32-x4.c",
]

PROD_FP16ARITH_MICROKERNEL_SRCS = [
    "src/f16-vbinary/gen/f16-vdiv-minmax-fp16arith-x2.c",
    "src/f16-vbinary/gen/f16-vdivc-minmax-fp16arith-x2.c",
    "src/f16-vbinary/gen/f16-vrdivc-minmax-fp16arith-x2.c",
]

PROD_NEON_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-neon-int16-x16.c",
    "src/f32-argmaxpool/f32-argmaxpool-4x-neon-c4.c",
    "src/f32-argmaxpool/f32-argmaxpool-9p8x-neon-c4.c",
    "src/f32-argmaxpool/f32-argmaxpool-9x-neon-c4.c",
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-neon-c4.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-neon-c4.c",
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-neon-2x2.c",
    "src/f32-dwconv/gen/f32-dwconv-3p8c-minmax-neon.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-minmax-neon.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-minmax-neon.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-minmax-neon-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-8f8m9l4c4s4r-minmax-neon-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-neon-2x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-neon-1x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-neon-1x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-neon-1x4.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-neon-x8.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-neon-x4.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-neon-c4.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-neon-c4.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-neon-lane-ld64.c",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-neon-lane-ld64.c",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-neon-lane-ld64.c",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-neon-lane-ld128.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-neon-p8.c",
    "src/f32-ibilinear/gen/f32-ibilinear-neon-c8.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-neon-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-neon-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-neon-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-neon-lane-ld128.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-neon-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-neon-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-neon-c4.c",
    "src/f32-prelu/gen/f32-prelu-neon-2x8.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-neon-x32.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-neon-x32.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-neon-rr2-lut64-p2-x8.c",
    "src/f32-rmax/f32-rmax-neon.c",
    "src/f32-spmm/gen/f32-spmm-32x1-minmax-neon.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vmaxc-neon-x8.c",
    "src/f32-vbinary/gen/f32-vmin-neon-x8.c",
    "src/f32-vbinary/gen/f32-vminc-neon-x8.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-neon-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-neon-x8.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-neon-x8.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-neon-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-neon-x8.c",
    "src/f32-velu/gen/f32-velu-neon-rr2-lut16-p3-x8.c",
    "src/f32-vhswish/gen/f32-vhswish-neon-x16.c",
    "src/f32-vlrelu/gen/f32-vlrelu-neon-x8.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c4-minmax-neon-2x.c",
    "src/f32-vrnd/gen/f32-vrndd-neon-x8.c",
    "src/f32-vrnd/gen/f32-vrndne-neon-x8.c",
    "src/f32-vrnd/gen/f32-vrndu-neon-x8.c",
    "src/f32-vrnd/gen/f32-vrndz-neon-x8.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-neon-rr2-lut64-p2-nr2recps-x8.c",
    "src/f32-vtanh/gen/f32-tanh-neon-expm1minus-rr1-p6h5ts-nr2recps-x8.c",
    "src/f32-vunary/gen/f32-vabs-neon-x8.c",
    "src/f32-vunary/gen/f32-vneg-neon-x8.c",
    "src/f32-vunary/gen/f32-vsqr-neon-x8.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p16c-minmax-fp32-neon-mla8-ld128.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p16c-minmax-fp32-neon-mla8-ld64.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p8c-minmax-fp32-neon-mla8-ld64.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p16c-minmax-fp32-neon-mla8-ld64.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-neon-mlal-lane.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8c2s4-minmax-fp32-neon-mlal.c",
    "src/qc8-gemm/gen/qc8-gemm-2x8c2s4-minmax-fp32-neon-mlal.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-neon-mlal-lane.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8c2s4-minmax-fp32-neon-mlal.c",
    "src/qc8-igemm/gen/qc8-igemm-2x8c2s4-minmax-fp32-neon-mlal.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p16c-minmax-rndnu-neon-mla8-ld64.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p8c-minmax-rndnu-neon-mla8-ld64.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p16c-minmax-rndnu-neon-mla8-ld64.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-neon-x32.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-rndnu-neon-c8.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-rndnu-neon-c8.c",
    "src/qs8-gemm/gen/qs8-gemm-1x8-minmax-rndnu-neon-mlal-lane.c",
    "src/qs8-gemm/gen/qs8-gemm-1x8c2s4-minmax-rndnu-neon-mlal.c",
    "src/qs8-gemm/gen/qs8-gemm-1x16-minmax-rndnu-neon-mlal-lane.c",
    "src/qs8-gemm/gen/qs8-gemm-2x8c2s4-minmax-rndnu-neon-mlal.c",
    "src/qs8-igemm/gen/qs8-igemm-1x8-minmax-rndnu-neon-mlal-lane.c",
    "src/qs8-igemm/gen/qs8-igemm-1x8c2s4-minmax-rndnu-neon-mlal.c",
    "src/qs8-igemm/gen/qs8-igemm-1x16-minmax-rndnu-neon-mlal-lane.c",
    "src/qs8-igemm/gen/qs8-igemm-2x8c2s4-minmax-rndnu-neon-mlal.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-neon-ld64-x16.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-neon-ld64-x32.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-neon-ld64-x16.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-neon-ld64-x32.c",
    "src/qs8-vcvt/gen/qs8-vcvt-neon-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-neon-x32.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-rndnu-neon-ld64-x16.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-rndnu-neon-ld64-x16.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-neon-x32.c",
    "src/qu8-avgpool/qu8-avgpool-9p8x-minmax-fp32-neon-c8.c",
    "src/qu8-avgpool/qu8-avgpool-9x-minmax-fp32-neon-c8.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p16c-minmax-rndnu-neon-mul8.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p8c-minmax-rndnu-neon-mul8.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-neon-x32.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-rndnu-neon-c8.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-rndnu-neon-c8.c",
    "src/qu8-gemm/gen/qu8-gemm-1x8-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-gemm/gen/qu8-gemm-1x16-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-gemm/gen/qu8-gemm-3x8-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-igemm/gen/qu8-igemm-1x8-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-igemm/gen/qu8-igemm-1x16-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-igemm/gen/qu8-igemm-3x8-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-neon-mlal-lane.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-neon-ld64-x16.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-neon-ld64-x32.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-neon-ld64-x16.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-neon-ld64-x32.c",
    "src/qu8-vcvt/gen/qu8-vcvt-neon-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-neon-x32.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-rndnu-neon-ld64-x16.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-rndnu-neon-ld64-x16.c",
    "src/s8-ibilinear/gen/s8-ibilinear-neon-c8.c",
    "src/s8-ibilinear/gen/s8-ibilinear-neon-c16.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-neon-c16.c",
    "src/s8-vclamp/s8-vclamp-neon-x64.c",
    "src/u8-ibilinear/gen/u8-ibilinear-neon-c8.c",
    "src/u8-ibilinear/gen/u8-ibilinear-neon-c16.c",
    "src/u8-maxpool/u8-maxpool-9p8x-minmax-neon-c16.c",
    "src/u8-rmax/u8-rmax-neon.c",
    "src/u8-vclamp/u8-vclamp-neon-x64.c",
    "src/xx-fill/xx-fill-neon-x64.c",
    "src/xx-pad/xx-pad-neon.c",
    "src/x8-transposec/gen/x8-transposec-16x16-reuse-dec-zip-neon.c",
    "src/x8-zip/x8-zip-xm-neon.c",
    "src/x8-zip/x8-zip-x2-neon.c",
    "src/x8-zip/x8-zip-x3-neon.c",
    "src/x8-zip/x8-zip-x4-neon.c",
    "src/x16-packw/gen/x16-packw-x8-neon-ld4lane-prfm-x4.c",
    "src/x16-packw/gen/x16-packw-x16-neon-ld4lane-prfm-x4.c",
    "src/x16-transposec/gen/x16-transposec-8x8-reuse-dec-zip-neon.c",
    "src/x24-transposec/x24-transposec-2x2-neon-tbl64.c",
    "src/x32-packw/gen/x32-packw-x2-neon-ld2lane-prfm-x2.c",
    "src/x32-packw/gen/x32-packw-x8-neon-ld4lane-prfm-x4.c",
    "src/x32-packw/gen/x32-packw-x8s4-neon-ld4lane-prfm-x4.c",
    "src/x32-packx/x32-packx-x4-neon-st4.c",
    "src/x32-transposec/gen/x32-transposec-4x4-reuse-dec-zip-neon.c",
    "src/x32-unpool/x32-unpool-neon.c",
    "src/x32-zip/x32-zip-xm-neon.c",
    "src/x32-zip/x32-zip-x2-neon.c",
    "src/x32-zip/x32-zip-x3-neon.c",
    "src/x32-zip/x32-zip-x4-neon.c",
]

PROD_NEONFP16_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-neonfp16-x16.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-neonfp16-x16.c",
]

PROD_NEONFMA_MICROKERNEL_SRCS = [
    "src/f32-dwconv/gen/f32-dwconv-3p8c-minmax-neonfma.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-minmax-neonfma.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l8c4s4r-minmax-neonfma-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-minmax-neonfma.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-minmax-neonfma-acc2.c",
    "src/f32-gemm/gen/f32-gemm-1x8s4-minmax-neonfma.c",
    "src/f32-gemm/gen/f32-gemm-4x8s4-minmax-neonfma.c",
    "src/f32-gemm/gen/f32-gemm-6x8s4-minmax-neonfma.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-neonfma-p8.c",
    "src/f32-ibilinear/gen/f32-ibilinear-neonfma-c8.c",
    "src/f32-igemm/gen/f32-igemm-1x8s4-minmax-neonfma.c",
    "src/f32-igemm/gen/f32-igemm-4x8s4-minmax-neonfma.c",
    "src/f32-igemm/gen/f32-igemm-6x8s4-minmax-neonfma.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-neonfma-rr1-lut64-p2-x16.c",
    "src/f32-spmm/gen/f32-spmm-32x1-minmax-neonfma-pipelined.c",
    "src/f32-velu/gen/f32-velu-neonfma-rr1-lut16-p3-x16.c",
    "src/f32-velu/gen/f32-velu-neonfma-rr1-p6-x8.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c4-minmax-neonfma-2x.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-neonfma-rr1-lut64-p2-nr2recps-x16.c",
    "src/f32-vtanh/gen/f32-tanh-neonfma-expm1minus-rr1-p6h5ts-nr2fma-x8.c",
]

PROD_NEON_AARCH64_MICROKERNEL_SRCS = [
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-aarch64-neonfma-2x2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-aarch64-neonfma-3x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-aarch64-neonfma-2x4-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-aarch64-neonfma-4x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-aarch64-neonfma-1x4-acc2.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-gemm/gen/f32-gemm-6x2-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-6x2-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-aarch64-neonfma-lane-ld64.c",
    "src/f32-spmm/gen/f32-spmm-32x2-minmax-aarch64-neonfma.c",
    "src/f32-spmm/gen/f32-spmm-32x4-minmax-aarch64-neonfma.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-aarch64-neon-x8.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-aarch64-neon-x8.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-aarch64-neon-x8.c",
    "src/f32-vsqrt/gen/f32-vsqrt-aarch64-neon-sqrt-x4.c",
    "src/f32-vtanh/gen/f32-tanh-aarch64-neonfma-expm1minus-rr1-p6h5ts-div-x16.c",
    "src/x8-lut/gen/x8-lut-aarch64-neon-tbx128x4-x64.c",
    "src/x24-transposec/x24-transposec-4x4-aarch64-neon-tbl128.c",
    "src/x32-transposec/x32-transposec-4x4-aarch64-neon-tbl128.c",
]

PROD_NEONV8_MICROKERNEL_SRCS = [
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-neonv8-x32.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-neonv8-x32.c",
    "src/f32-vrnd/gen/f32-vrndd-neonv8-x8.c",
    "src/f32-vrnd/gen/f32-vrndne-neonv8-x8.c",
    "src/f32-vrnd/gen/f32-vrndu-neonv8-x8.c",
    "src/f32-vrnd/gen/f32-vrndz-neonv8-x8.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p16c-minmax-fp32-neonv8-mla8-ld128.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p16c-minmax-fp32-neonv8-mla8-ld64.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p8c-minmax-fp32-neonv8-mla8-ld64.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p16c-minmax-fp32-neonv8-mla8-ld64.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-neonv8-mlal-lane-prfm.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-neonv8-mlal-lane.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8c2s4-minmax-fp32-neonv8-mlal.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8c8-minmax-fp32-neonv8-mlal.c",
    "src/qc8-gemm/gen/qc8-gemm-1x16-minmax-fp32-neonv8-mlal-lane.c",
    "src/qc8-gemm/gen/qc8-gemm-2x8c2s4-minmax-fp32-neonv8-mlal.c",
    "src/qc8-gemm/gen/qc8-gemm-2x8c8-minmax-fp32-neonv8-mlal.c",
    "src/qc8-gemm/gen/qc8-gemm-4x16-minmax-fp32-neonv8-mlal-lane.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-neonv8-mlal-lane-prfm.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-neonv8-mlal-lane.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8c2s4-minmax-fp32-neonv8-mlal.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8c8-minmax-fp32-neonv8-mlal.c",
    "src/qc8-igemm/gen/qc8-igemm-1x16-minmax-fp32-neonv8-mlal-lane.c",
    "src/qc8-igemm/gen/qc8-igemm-2x8c2s4-minmax-fp32-neonv8-mlal.c",
    "src/qc8-igemm/gen/qc8-igemm-2x8c8-minmax-fp32-neonv8-mlal.c",
    "src/qc8-igemm/gen/qc8-igemm-4x16-minmax-fp32-neonv8-mlal-lane.c",
]

PROD_NEONFP16ARITH_MICROKERNEL_SRCS = [
    "src/f16-avgpool/f16-avgpool-9p8x-minmax-neonfp16arith-c8.c",
    "src/f16-avgpool/f16-avgpool-9x-minmax-neonfp16arith-c8.c",
    "src/f16-conv-hwc2chw/f16-conv-hwc2chw-3x3s2p1c3x4-neonfp16arith-2x2.c",
    "src/f16-dwconv/gen/f16-dwconv-3p16c-minmax-neonfp16arith.c",
    "src/f16-dwconv/gen/f16-dwconv-4p16c-minmax-neonfp16arith.c",
    "src/f16-dwconv/gen/f16-dwconv-9p8c-minmax-neonfp16arith.c",
    "src/f16-dwconv/gen/f16-dwconv-9p16c-minmax-neonfp16arith.c",
    "src/f16-dwconv/gen/f16-dwconv-25p8c-minmax-neonfp16arith-acc2.c",
    "src/f16-dwconv2d-chw/gen/f16-dwconv2d-chw-3x3p1-minmax-neonfp16arith-2x8.c",
    "src/f16-dwconv2d-chw/gen/f16-dwconv2d-chw-3x3s2p1-minmax-neonfp16arith-1x8.c",
    "src/f16-dwconv2d-chw/gen/f16-dwconv2d-chw-5x5p2-minmax-neonfp16arith-1x8.c",
    "src/f16-dwconv2d-chw/gen/f16-dwconv2d-chw-5x5s2p2-minmax-neonfp16arith-1x8.c",
    "src/f16-gavgpool-cw/f16-gavgpool-cw-neonfp16arith-x8.c",
    "src/f16-gavgpool/gen/f16-gavgpool-7p7x-minmax-neonfp16arith-c8.c",
    "src/f16-gavgpool/gen/f16-gavgpool-7x-minmax-neonfp16arith-c8.c",
    "src/f16-gemm/gen/f16-gemm-1x8-minmax-neonfp16arith-ld64.c",
    "src/f16-gemm/gen/f16-gemm-1x16-minmax-neonfp16arith-ld64.c",
    "src/f16-gemm/gen/f16-gemm-6x8-minmax-neonfp16arith-ld64.c",
    "src/f16-gemm/gen/f16-gemm-6x16-minmax-neonfp16arith-ld64.c",
    "src/f16-ibilinear-chw/gen/f16-ibilinear-chw-neonfp16arith-p8.c",
    "src/f16-ibilinear/gen/f16-ibilinear-neonfp16arith-c8.c",
    "src/f16-igemm/gen/f16-igemm-1x8-minmax-neonfp16arith-ld64.c",
    "src/f16-igemm/gen/f16-igemm-1x16-minmax-neonfp16arith-ld64.c",
    "src/f16-igemm/gen/f16-igemm-6x8-minmax-neonfp16arith-ld64.c",
    "src/f16-igemm/gen/f16-igemm-6x16-minmax-neonfp16arith-ld64.c",
    "src/f16-maxpool/f16-maxpool-9p8x-minmax-neonfp16arith-c8.c",
    "src/f16-pavgpool/f16-pavgpool-9p8x-minmax-neonfp16arith-c8.c",
    "src/f16-pavgpool/f16-pavgpool-9x-minmax-neonfp16arith-c8.c",
    "src/f16-prelu/gen/f16-prelu-neonfp16arith-2x16.c",
    "src/f16-raddstoreexpminusmax/gen/f16-raddstoreexpminusmax-neonfp16arith-rr2-p2-x32.c",
    "src/f16-raddstoreexpminusmax/gen/f16-raddstoreexpminusmax-neonfp16arith-rr2-p2-x40.c",
    "src/f16-rmax/f16-rmax-neonfp16arith.c",
    "src/f16-spmm/gen/f16-spmm-32x1-minmax-neonfp16arith-pipelined.c",
    "src/f16-vbinary/gen/f16-vadd-minmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vaddc-minmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vmaxc-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vmin-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vminc-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vmul-minmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vmulc-minmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vrsubc-minmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vsqrdiff-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vsqrdiffc-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vsub-minmax-neonfp16arith-x16.c",
    "src/f16-vbinary/gen/f16-vsubc-minmax-neonfp16arith-x16.c",
    "src/f16-vclamp/gen/f16-vclamp-neonfp16arith-x16.c",
    "src/f16-velu/gen/f16-velu-neonfp16arith-rr1-p3-x16.c",
    "src/f16-vhswish/gen/f16-vhswish-neonfp16arith-x16.c",
    "src/f16-vlrelu/gen/f16-vlrelu-neonfp16arith-x16.c",
    "src/f16-vmulcaddc/gen/f16-vmulcaddc-c8-minmax-neonfp16arith-2x.c",
    "src/f16-vrnd/gen/f16-vrndd-neonfp16arith-x16.c",
    "src/f16-vrnd/gen/f16-vrndne-neonfp16arith-x16.c",
    "src/f16-vrnd/gen/f16-vrndu-neonfp16arith-x16.c",
    "src/f16-vrnd/gen/f16-vrndz-neonfp16arith-x16.c",
    "src/f16-vsigmoid/gen/f16-vsigmoid-neonfp16arith-rr2-p2-nr1fma-x40.c",
    "src/f16-vsigmoid/gen/f16-vsigmoid-neonfp16arith-rr2-p2-nr1recps-x16.c",
    "src/f16-vsqrt/gen/f16-vsqrt-neonfp16arith-nr1fma1adj-x8.c",
    "src/f16-vtanh/gen/f16-vtanh-neonfp16arith-expm1minus-rr1-p3h2ts-nr1fma-x32.c",
    "src/f16-vunary/gen/f16-vabs-neonfp16arith-x16.c",
    "src/f16-vunary/gen/f16-vneg-neonfp16arith-x16.c",
    "src/f16-vunary/gen/f16-vsqr-neonfp16arith-x16.c",
]

PROD_NEONFP16ARITH_AARCH64_MICROKERNEL_SRCS = [
    "src/f16-vbinary/gen/f16-vdiv-minmax-aarch64-neonfp16arith-x8.c",
    "src/f16-vbinary/gen/f16-vdivc-minmax-aarch64-neonfp16arith-x8.c",
    "src/f16-vbinary/gen/f16-vrdivc-minmax-aarch64-neonfp16arith-x8.c",
    "src/f16-vsqrt/gen/f16-vsqrt-aarch64-neonfp16arith-sqrt-x8.c",
    "src/f16-vtanh/gen/f16-vtanh-aarch64-neonfp16arith-expm1minus-rr1-p3h2ts-div-x32.c",
]

PROD_NEONBF16_MICROKERNEL_SRCS = [
]

PROD_NEONBF16_AARCH64_MICROKERNEL_SRCS = [
]

PROD_NEONDOT_MICROKERNEL_SRCS = [
    "src/qc8-gemm/gen/qc8-gemm-1x8c4-minmax-fp32-neondot.c",
    "src/qc8-gemm/gen/qc8-gemm-1x16c4-minmax-fp32-neondot.c",
    "src/qc8-gemm/gen/qc8-gemm-4x8c4-minmax-fp32-neondot.c",
    "src/qc8-gemm/gen/qc8-gemm-4x16c4-minmax-fp32-neondot.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8c4-minmax-fp32-neondot.c",
    "src/qc8-igemm/gen/qc8-igemm-1x16c4-minmax-fp32-neondot.c",
    "src/qc8-igemm/gen/qc8-igemm-4x8c4-minmax-fp32-neondot.c",
    "src/qc8-igemm/gen/qc8-igemm-4x16c4-minmax-fp32-neondot.c",
    "src/qs8-gemm/gen/qs8-gemm-1x8c4-minmax-rndnu-neondot.c",
    "src/qs8-gemm/gen/qs8-gemm-1x16c4-minmax-rndnu-neondot.c",
    "src/qs8-gemm/gen/qs8-gemm-4x8c4-minmax-rndnu-neondot.c",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-rndnu-neondot.c",
    "src/qs8-igemm/gen/qs8-igemm-1x8c4-minmax-rndnu-neondot.c",
    "src/qs8-igemm/gen/qs8-igemm-1x16c4-minmax-rndnu-neondot.c",
    "src/qs8-igemm/gen/qs8-igemm-4x8c4-minmax-rndnu-neondot.c",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-rndnu-neondot.c",
    "src/qu8-gemm/gen/qu8-gemm-1x8c4-minmax-rndnu-neondot.c",
    "src/qu8-gemm/gen/qu8-gemm-1x16c4-minmax-rndnu-neondot.c",
    "src/qu8-gemm/gen/qu8-gemm-4x8c4-minmax-rndnu-neondot.c",
    "src/qu8-gemm/gen/qu8-gemm-4x16c4-minmax-rndnu-neondot.c",
    "src/qu8-igemm/gen/qu8-igemm-1x8c4-minmax-rndnu-neondot.c",
    "src/qu8-igemm/gen/qu8-igemm-1x16c4-minmax-rndnu-neondot.c",
    "src/qu8-igemm/gen/qu8-igemm-4x8c4-minmax-rndnu-neondot.c",
    "src/qu8-igemm/gen/qu8-igemm-4x16c4-minmax-rndnu-neondot.c",
]

PROD_SSE_MICROKERNEL_SRCS = [
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-sse-c4.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-sse-c4.c",
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-sse-2x2.c",
    "src/f32-dwconv/gen/f32-dwconv-3p8c-minmax-sse.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-minmax-sse.c",
    "src/f32-dwconv/gen/f32-dwconv-8f8m9l16c4s4r-minmax-sse-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-minmax-sse.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-minmax-sse.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-sse-2x4-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-sse-1x4-acc3.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-sse-4x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-sse-2x4.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-sse-x4.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-sse-c4.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-sse-c4.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-sse-load1.c",
    "src/f32-gemm/gen/f32-gemm-4x2c4-minmax-sse.c",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-sse-load1.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-sse-p8.c",
    "src/f32-ibilinear/gen/f32-ibilinear-sse-c8.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-sse-load1.c",
    "src/f32-igemm/gen/f32-igemm-4x2c4-minmax-sse.c",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-sse-load1.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-sse-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-sse-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-sse-c4.c",
    "src/f32-rmax/f32-rmax-sse.c",
    "src/f32-spmm/gen/f32-spmm-32x1-minmax-sse.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vmaxc-sse-x8.c",
    "src/f32-vbinary/gen/f32-vmin-sse-x8.c",
    "src/f32-vbinary/gen/f32-vminc-sse-x8.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-sse-x8.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-sse-x8.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-sse-x8.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-sse-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-sse-x8.c",
    "src/f32-vhswish/gen/f32-vhswish-sse-x8.c",
    "src/f32-vlrelu/gen/f32-vlrelu-sse-x8.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c4-minmax-sse-2x.c",
    "src/f32-vsqrt/gen/f32-vsqrt-sse-sqrt-x4.c",
    "src/f32-vunary/gen/f32-vabs-sse-x8.c",
    "src/f32-vunary/gen/f32-vneg-sse-x8.c",
    "src/f32-vunary/gen/f32-vsqr-sse-x8.c",
    "src/x32-packx/x32-packx-x4-sse.c",
    "src/x32-transposec/x32-transposec-4x4-sse.c",
]

PROD_SSE2_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-sse2-int16-x32.c",
    "src/f16-vunary/gen/f16-vabs-sse2-x16.c",
    "src/f16-vunary/gen/f16-vneg-sse2-x16.c",
    "src/f32-argmaxpool/f32-argmaxpool-4x-sse2-c4.c",
    "src/f32-argmaxpool/f32-argmaxpool-9p8x-sse2-c4.c",
    "src/f32-argmaxpool/f32-argmaxpool-9x-sse2-c4.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-sse2-x16.c",
    "src/f32-prelu/gen/f32-prelu-sse2-2x8.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-sse2-x32.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-sse2-x32.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-sse2-rr2-p5-x20-acc2.c",
    "src/f32-velu/gen/f32-velu-sse2-rr2-lut16-p3-x12.c",
    "src/f32-vlrelu/gen/f32-vlrelu-sse2-x8.c",
    "src/f32-vrnd/gen/f32-vrndd-sse2-x8.c",
    "src/f32-vrnd/gen/f32-vrndne-sse2-x8.c",
    "src/f32-vrnd/gen/f32-vrndu-sse2-x8.c",
    "src/f32-vrnd/gen/f32-vrndz-sse2-x8.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-sse2-rr2-lut64-p2-div-x8.c",
    "src/f32-vtanh/gen/f32-vtanh-sse2-expm1minus-rr1-lut8-p4h3ts-div-x16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p8c-minmax-fp32-sse2-mul16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p8c-minmax-fp32-sse2-mul16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p8c-minmax-fp32-sse2-mul16.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4c8-minmax-fp32-sse2-ld64.c",
    "src/qc8-gemm/gen/qc8-gemm-3x4c8-minmax-fp32-sse2-ld64.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4c8-minmax-fp32-sse2-ld64.c",
    "src/qc8-igemm/gen/qc8-igemm-3x4c8-minmax-fp32-sse2-ld64.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p8c-minmax-fp32-sse2-mul16-add16.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p8c-minmax-fp32-sse2-mul16-add16.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-sse2-x32.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-fp32-sse2-c8.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-fp32-sse2-c8.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4c8-minmax-fp32-sse2-ld64.c",
    "src/qs8-gemm/gen/qs8-gemm-3x4c8-minmax-fp32-sse2-ld64.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4c8-minmax-fp32-sse2-ld64.c",
    "src/qs8-igemm/gen/qs8-igemm-3x4c8-minmax-fp32-sse2-ld64.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-sse2-mul16-ld64-x8.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-sse2-mul16-ld64-x8.c",
    "src/qs8-vcvt/gen/qs8-vcvt-sse2-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-sse2-x32.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-sse2-mul16-ld64-x8.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-sse2-mul16-ld64-x8.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-sse2-x16.c",
    "src/qu8-avgpool/qu8-avgpool-9p8x-minmax-fp32-sse2-c8.c",
    "src/qu8-avgpool/qu8-avgpool-9x-minmax-fp32-sse2-c8.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p8c-minmax-fp32-sse2-mul16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p8c-minmax-fp32-sse2-mul16.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-sse2-x32.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-fp32-sse2-c8.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-fp32-sse2-c8.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4c8-minmax-fp32-sse2-ld64.c",
    "src/qu8-gemm/gen/qu8-gemm-3x4c8-minmax-fp32-sse2-ld64.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4c8-minmax-fp32-sse2-ld64.c",
    "src/qu8-igemm/gen/qu8-igemm-3x4c8-minmax-fp32-sse2-ld64.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-sse2-mul16-ld64-x8.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-sse2-mul16-ld64-x8.c",
    "src/qu8-vcvt/gen/qu8-vcvt-sse2-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-sse2-x32.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-sse2-mul16-ld64-x8.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-sse2-mul16-ld64-x8.c",
    "src/s8-ibilinear/gen/s8-ibilinear-sse2-c8.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-sse2-c16.c",
    "src/s8-vclamp/s8-vclamp-sse2-x64.c",
    "src/u8-ibilinear/gen/u8-ibilinear-sse2-c8.c",
    "src/u8-maxpool/u8-maxpool-9p8x-minmax-sse2-c16.c",
    "src/u8-rmax/u8-rmax-sse2.c",
    "src/u8-vclamp/u8-vclamp-sse2-x64.c",
    "src/xx-fill/xx-fill-sse2-x64.c",
    "src/xx-pad/xx-pad-sse2.c",
    "src/x8-transposec/gen/x8-transposec-16x16-reuse-mov-sse2.c",
    "src/x8-zip/x8-zip-xm-sse2.c",
    "src/x8-zip/x8-zip-x2-sse2.c",
    "src/x8-zip/x8-zip-x3-sse2.c",
    "src/x8-zip/x8-zip-x4-sse2.c",
    "src/x16-transposec/gen/x16-transposec-8x8-reuse-multi-sse2.c",
    "src/x32-packw/gen/x32-packw-x2c4-sse2-x4.c",
    "src/x32-packw/gen/x32-packw-x8-sse2-x4.c",
    "src/x32-unpool/x32-unpool-sse2.c",
    "src/x32-zip/x32-zip-xm-sse2.c",
    "src/x32-zip/x32-zip-x2-sse2.c",
    "src/x32-zip/x32-zip-x3-sse2.c",
    "src/x32-zip/x32-zip-x4-sse2.c",
]

PROD_SSSE3_MICROKERNEL_SRCS = [
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-ssse3-2x4-acc2.c",
    "src/qs8-vcvt/gen/qs8-vcvt-ssse3-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-ssse3-x32.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-ssse3-x16.c",
    "src/qu8-vcvt/gen/qu8-vcvt-ssse3-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-ssse3-x32.c",
    "src/x24-transposec/x24-transposec-4x4-ssse3.c",
]

PROD_SSE41_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-sse41-int16-x16.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-sse41-x8.c",
    "src/f32-prelu/gen/f32-prelu-sse41-2x8.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-sse41-x32.c",
    "src/f32-vlrelu/gen/f32-vlrelu-sse41-x8.c",
    "src/f32-vrnd/gen/f32-vrndd-sse41-x8.c",
    "src/f32-vrnd/gen/f32-vrndne-sse41-x8.c",
    "src/f32-vrnd/gen/f32-vrndu-sse41-x8.c",
    "src/f32-vrnd/gen/f32-vrndz-sse41-x8.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-sse41-rr2-lut64-p2-div-x8.c",
    "src/f32-vtanh/gen/f32-vtanh-sse41-expm1minus-rr1-lut8-p4h3ts-div-x20.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p8c-minmax-fp32-sse41-mul16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p8c-minmax-fp32-sse41-mul16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p8c-minmax-fp32-sse41-mul16.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4c8-minmax-fp32-sse41-ld64.c",
    "src/qc8-gemm/gen/qc8-gemm-3x4c8-minmax-fp32-sse41-ld64.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4c8-minmax-fp32-sse41-ld64.c",
    "src/qc8-igemm/gen/qc8-igemm-3x4c8-minmax-fp32-sse41-ld64.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p8c-minmax-fp32-sse41-mul16-add16.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p8c-minmax-fp32-sse41-mul16-add16.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-sse41-x16.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-fp32-sse41-c8.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-fp32-sse41-c8.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4c8-minmax-fp32-sse41-ld64.c",
    "src/qs8-gemm/gen/qs8-gemm-3x4c8-minmax-fp32-sse41-ld64.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4c8-minmax-fp32-sse41-ld64.c",
    "src/qs8-igemm/gen/qs8-igemm-3x4c8-minmax-fp32-sse41-ld64.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-sse41-mul16-ld64-x8.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-sse41-mul16-ld64-x8.c",
    "src/qs8-vcvt/gen/qs8-vcvt-sse41-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-sse41-x32.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-sse41-mul16-ld64-x16.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-sse41-mul16-ld64-x16.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-sse41-x16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p8c-minmax-fp32-sse41-mul16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p8c-minmax-fp32-sse41-mul16.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-sse41-x16.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-fp32-sse41-c8.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-fp32-sse41-c8.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4c8-minmax-fp32-sse41-ld64.c",
    "src/qu8-gemm/gen/qu8-gemm-3x4c8-minmax-fp32-sse41-ld64.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4c8-minmax-fp32-sse41-ld64.c",
    "src/qu8-igemm/gen/qu8-igemm-3x4c8-minmax-fp32-sse41-ld64.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-sse41-mul16-ld64-x8.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-sse41-mul16-ld64-x8.c",
    "src/qu8-vcvt/gen/qu8-vcvt-sse41-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-sse41-x32.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-sse41-mul16-ld64-x16.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-sse41-mul16-ld64-x16.c",
    "src/s8-ibilinear/gen/s8-ibilinear-sse41-c16.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-sse41-c16.c",
    "src/s8-vclamp/s8-vclamp-sse41-x64.c",
    "src/u8-ibilinear/gen/u8-ibilinear-sse41-c16.c",
]

PROD_AVX_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-avx-int16-x16.c",
    "src/f32-dwconv/gen/f32-dwconv-3p16c-minmax-avx.c",
    "src/f32-dwconv/gen/f32-dwconv-4p16c-minmax-avx.c",
    "src/f32-dwconv/gen/f32-dwconv-6f6m7l8c8s4r-minmax-avx-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p16c-minmax-avx.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-minmax-avx.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-avx-x24.c",
    "src/f32-gemm/gen/f32-gemm-1x16-minmax-avx-broadcast.c",
    "src/f32-gemm/gen/f32-gemm-5x16-minmax-avx-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-1x16-minmax-avx-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-5x16-minmax-avx-broadcast.c",
    "src/f32-prelu/gen/f32-prelu-avx-2x16.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-avx-x32.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-avx-x32.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vmaxc-avx-x16.c",
    "src/f32-vbinary/gen/f32-vmin-avx-x16.c",
    "src/f32-vbinary/gen/f32-vminc-avx-x16.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-avx-x16.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-avx-x16.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-avx-x16.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-avx-x16.c",
    "src/f32-vclamp/gen/f32-vclamp-avx-x16.c",
    "src/f32-velu/gen/f32-velu-avx-rr2-lut4-p4-perm-x32.c",
    "src/f32-vhswish/gen/f32-vhswish-avx-x16.c",
    "src/f32-vlrelu/gen/f32-vlrelu-avx-x16.c",
    "src/f32-vrnd/gen/f32-vrndd-avx-x16.c",
    "src/f32-vrnd/gen/f32-vrndne-avx-x16.c",
    "src/f32-vrnd/gen/f32-vrndu-avx-x16.c",
    "src/f32-vrnd/gen/f32-vrndz-avx-x16.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-avx-rr2-p5-nr2-x40.c",
    "src/f32-vsqrt/gen/f32-vsqrt-avx-sqrt-x8.c",
    "src/f32-vtanh/gen/f32-vtanh-avx-expm1minus-rr1-lut4-p4h2ts-div-x48.c",
    "src/f32-vunary/gen/f32-vabs-avx-x16.c",
    "src/f32-vunary/gen/f32-vneg-avx-x16.c",
    "src/f32-vunary/gen/f32-vsqr-avx-x16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p16c-minmax-fp32-avx-mul16-add16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p16c-minmax-fp32-avx-mul16-add16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p16c-minmax-fp32-avx-mul16-add16.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4c8-minmax-fp32-avx-ld128.c",
    "src/qc8-gemm/gen/qc8-gemm-2x4c8-minmax-fp32-avx-ld128.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4c8-minmax-fp32-avx-ld128.c",
    "src/qc8-igemm/gen/qc8-igemm-2x4c8-minmax-fp32-avx-ld128.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p16c-minmax-fp32-avx-mul16-add16.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p16c-minmax-fp32-avx-mul16-add16.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-avx-x32.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4c8-minmax-fp32-avx-ld128.c",
    "src/qs8-gemm/gen/qs8-gemm-2x4c8-minmax-fp32-avx-ld128.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4c8-minmax-fp32-avx-ld128.c",
    "src/qs8-igemm/gen/qs8-igemm-2x4c8-minmax-fp32-avx-ld128.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-avx-mul32-ld32-x8.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-avx-mul32-ld32-x8.c",
    "src/qs8-vcvt/gen/qs8-vcvt-avx-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-avx-x32.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-avx-mul16-ld64-x16.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-avx-mul16-ld64-x16.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-avx-x16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p16c-minmax-fp32-avx-mul16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p16c-minmax-fp32-avx-mul16.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-avx-x32.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4c8-minmax-fp32-avx-ld128.c",
    "src/qu8-gemm/gen/qu8-gemm-2x4c8-minmax-fp32-avx-ld128.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4c8-minmax-fp32-avx-ld128.c",
    "src/qu8-igemm/gen/qu8-igemm-2x4c8-minmax-fp32-avx-ld128.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-avx-mul32-ld32-x8.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-avx-mul32-ld32-x8.c",
    "src/qu8-vcvt/gen/qu8-vcvt-avx-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-avx-x32.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-avx-mul16-ld64-x16.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-avx-mul16-ld64-x16.c",
    "src/x8-lut/gen/x8-lut-avx-x64.c",
    "src/x32-packw/gen/x32-packw-x16-avx-x4.c",
    "src/x32-packw/gen/x32-packw-x16s4-avx-x4.c",
    "src/x32-transposec/gen/x32-transposec-8x8-reuse-multi-avx.c",
]

PROD_F16C_MICROKERNEL_SRCS = [
    "src/f16-avgpool/f16-avgpool-9p8x-minmax-f16c-c8.c",
    "src/f16-avgpool/f16-avgpool-9x-minmax-f16c-c8.c",
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-f16c-x16.c",
    "src/f16-gavgpool/gen/f16-gavgpool-7p7x-minmax-f16c-c8.c",
    "src/f16-gavgpool/gen/f16-gavgpool-7x-minmax-f16c-c8.c",
    "src/f16-maxpool/f16-maxpool-9p8x-minmax-f16c-c8.c",
    "src/f16-prelu/gen/f16-prelu-f16c-2x16.c",
    "src/f16-rmax/f16-rmax-f16c.c",
    "src/f16-vbinary/gen/f16-vadd-minmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vaddc-minmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vdiv-minmax-f16c-x8.c",
    "src/f16-vbinary/gen/f16-vdivc-minmax-f16c-x8.c",
    "src/f16-vbinary/gen/f16-vmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vmaxc-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vmin-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vminc-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vmul-minmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vmulc-minmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vrdivc-minmax-f16c-x8.c",
    "src/f16-vbinary/gen/f16-vrsubc-minmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vsqrdiff-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vsqrdiffc-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vsub-minmax-f16c-x16.c",
    "src/f16-vbinary/gen/f16-vsubc-minmax-f16c-x16.c",
    "src/f16-vclamp/gen/f16-vclamp-f16c-x16.c",
    "src/f16-vhswish/gen/f16-vhswish-f16c-x16.c",
    "src/f16-vlrelu/gen/f16-vlrelu-f16c-x16.c",
    "src/f16-vrnd/gen/f16-vrndd-f16c-x16.c",
    "src/f16-vrnd/gen/f16-vrndne-f16c-x16.c",
    "src/f16-vrnd/gen/f16-vrndu-f16c-x16.c",
    "src/f16-vrnd/gen/f16-vrndz-f16c-x16.c",
    "src/f16-vsqrt/gen/f16-vsqrt-f16c-sqrt-x8.c",
    "src/f16-vtanh/gen/f16-vtanh-f16c-expm1minus-rr1-p3h2ts-rcp-x72.c",
    "src/f16-vunary/gen/f16-vsqr-f16c-x16.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-f16c-x16.c",
]

PROD_XOP_MICROKERNEL_SRCS = [
    "src/qc8-dwconv/gen/qc8-dwconv-3p16c-minmax-fp32-xop-mul16-add16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p16c-minmax-fp32-xop-mul16-add16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p16c-minmax-fp32-xop-mul16-add16.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4c8-minmax-fp32-xop-ld64.c",
    "src/qc8-gemm/gen/qc8-gemm-2x4c8-minmax-fp32-xop-ld64.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4c8-minmax-fp32-xop-ld64.c",
    "src/qc8-igemm/gen/qc8-igemm-2x4c8-minmax-fp32-xop-ld64.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p16c-minmax-fp32-xop-mul16-add16.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p16c-minmax-fp32-xop-mul16-add16.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4c8-minmax-fp32-xop-ld64.c",
    "src/qs8-gemm/gen/qs8-gemm-2x4c8-minmax-fp32-xop-ld64.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4c8-minmax-fp32-xop-ld64.c",
    "src/qs8-igemm/gen/qs8-igemm-2x4c8-minmax-fp32-xop-ld64.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-xop-mul32-ld32-x8.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-xop-mul32-ld32-x8.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p16c-minmax-fp32-xop-mul32.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p16c-minmax-fp32-xop-mul32.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4c8-minmax-fp32-xop-ld64.c",
    "src/qu8-gemm/gen/qu8-gemm-2x4c8-minmax-fp32-xop-ld64.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4c8-minmax-fp32-xop-ld64.c",
    "src/qu8-igemm/gen/qu8-igemm-2x4c8-minmax-fp32-xop-ld64.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-xop-mul32-ld32-x8.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-xop-mul32-ld32-x8.c",
]

PROD_FMA3_MICROKERNEL_SRCS = [
    "src/f16-dwconv/gen/f16-dwconv-3p16c-minmax-fma3.c",
    "src/f16-dwconv/gen/f16-dwconv-4p16c-minmax-fma3.c",
    "src/f16-dwconv/gen/f16-dwconv-9p16c-minmax-fma3.c",
    "src/f16-dwconv/gen/f16-dwconv-25p8c-minmax-fma3-acc2.c",
    "src/f16-ibilinear/gen/f16-ibilinear-fma3-c8.c",
    "src/f16-vmulcaddc/gen/f16-vmulcaddc-c8-minmax-fma3-2x.c",
    "src/f16-vtanh/gen/f16-vtanh-fma3-polynomial-p19h9-x32.c",
    "src/f32-dwconv/gen/f32-dwconv-3p16c-minmax-fma3.c",
    "src/f32-dwconv/gen/f32-dwconv-4p16c-minmax-fma3.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l8c8s4r-minmax-fma3.c",
    "src/f32-dwconv/gen/f32-dwconv-9p16c-minmax-fma3.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-minmax-fma3.c",
    "src/f32-gemm/gen/f32-gemm-1x16-minmax-fma3-broadcast.c",
    "src/f32-gemm/gen/f32-gemm-1x16s4-minmax-fma3-broadcast.c",
    "src/f32-gemm/gen/f32-gemm-4x16s4-minmax-fma3-broadcast.c",
    "src/f32-gemm/gen/f32-gemm-5x16-minmax-fma3-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-1x16-minmax-fma3-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-1x16s4-minmax-fma3-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-4x16s4-minmax-fma3-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-5x16-minmax-fma3-broadcast.c",
    "src/f32-vhswish/gen/f32-vhswish-fma3-x16.c",
    "src/f32-vtanh/gen/f32-vtanh-fma3-expm1minus-rr1-lut4-p4h3ts-div-x40.c",
]

PROD_AVX2_MICROKERNEL_SRCS = [
    "src/f16-gemm/gen/f16-gemm-1x16-minmax-avx2-broadcast.c",
    "src/f16-gemm/gen/f16-gemm-4x16-minmax-avx2-broadcast.c",
    "src/f16-igemm/gen/f16-igemm-1x16-minmax-avx2-broadcast.c",
    "src/f16-igemm/gen/f16-igemm-4x16-minmax-avx2-broadcast.c",
    "src/f16-pavgpool/f16-pavgpool-9p8x-minmax-avx2-c8.c",
    "src/f16-pavgpool/f16-pavgpool-9x-minmax-avx2-c8.c",
    "src/f16-raddstoreexpminusmax/gen/f16-raddstoreexpminusmax-avx2-rr1-p2-x40.c",
    "src/f16-velu/gen/f16-velu-avx2-rr1-p3-x16.c",
    "src/f16-vsigmoid/gen/f16-vsigmoid-avx2-rr1-p2-rcp-x32.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-avx2-x64.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-avx2-x64.c",
    "src/f32-velu/gen/f32-velu-avx2-rr1-lut4-p4-perm-x56.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-avx2-rr1-p5-div-x40.c",
    "src/f32-vtanh/gen/f32-vtanh-avx2-expm1minus-rr1-lut4-p4h3ts-perm-div-x32.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p16c-minmax-fp32-avx2-mul32.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p16c-minmax-fp32-avx2-mul32.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p16c-minmax-fp32-avx2-mul32.c",
    "src/qc8-gemm/gen/qc8-gemm-1x8c8-minmax-fp32-avx2.c",
    "src/qc8-gemm/gen/qc8-gemm-3x8c8-minmax-fp32-avx2.c",
    "src/qc8-igemm/gen/qc8-igemm-1x8c8-minmax-fp32-avx2.c",
    "src/qc8-igemm/gen/qc8-igemm-3x8c8-minmax-fp32-avx2.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p16c-minmax-fp32-avx2-mul32.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p16c-minmax-fp32-avx2-mul32.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-avx2-x16.c",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-fp32-avx2.c",
    "src/qs8-gemm/gen/qs8-gemm-3x8c8-minmax-fp32-avx2.c",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-fp32-avx2.c",
    "src/qs8-igemm/gen/qs8-igemm-3x8c8-minmax-fp32-avx2.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-avx2-mul32-ld64-x16.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-avx2-mul32-ld64-x16.c",
    "src/qs8-vcvt/gen/qs8-vcvt-avx2-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-avx2-x32.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p16c-minmax-fp32-avx2-mul32.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p16c-minmax-fp32-avx2-mul32.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-avx2-x16.c",
    "src/qu8-gemm/gen/qu8-gemm-1x8c8-minmax-fp32-avx2.c",
    "src/qu8-gemm/gen/qu8-gemm-3x8c8-minmax-fp32-avx2.c",
    "src/qu8-igemm/gen/qu8-igemm-1x8c8-minmax-fp32-avx2.c",
    "src/qu8-igemm/gen/qu8-igemm-3x8c8-minmax-fp32-avx2.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-avx2-mul32-ld64-x16.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-avx2-mul32-ld64-x16.c",
    "src/qu8-vcvt/gen/qu8-vcvt-avx2-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-avx2-x32.c",
    "src/x8-lut/gen/x8-lut-avx2-x128.c",
    "src/x8-transposec/gen/x8-transposec-32x32-reuse-switch-avx2.c",
    "src/x16-transposec/gen/x16-transposec-16x16-reuse-switch-avx2.c",
]

PROD_AVX512F_MICROKERNEL_SRCS = [
    "src/f32-dwconv/gen/f32-dwconv-3p16c-minmax-avx512f.c",
    "src/f32-dwconv/gen/f32-dwconv-4p16c-minmax-avx512f.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l32c16s1r-minmax-avx512f-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p16c-minmax-avx512f.c",
    "src/f32-dwconv/gen/f32-dwconv-25p16c-minmax-avx512f.c",
    "src/f32-gemm/gen/f32-gemm-1x16-minmax-avx512f-broadcast.c",
    "src/f32-gemm/gen/f32-gemm-7x16-minmax-avx512f-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-1x16-minmax-avx512f-broadcast.c",
    "src/f32-igemm/gen/f32-igemm-7x16-minmax-avx512f-broadcast.c",
    "src/f32-prelu/gen/f32-prelu-avx512f-2x16.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vmaxc-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vmin-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vminc-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-avx512f-x32.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-avx512f-x32.c",
    "src/f32-vclamp/gen/f32-vclamp-avx512f-x16.c",
    "src/f32-velu/gen/f32-velu-avx512f-rr1-lut16-p3-perm-x64.c",
    "src/f32-vhswish/gen/f32-vhswish-avx512f-x16.c",
    "src/f32-vlrelu/gen/f32-vlrelu-avx512f-x16.c",
    "src/f32-vrnd/gen/f32-vrndd-avx512f-x16.c",
    "src/f32-vrnd/gen/f32-vrndne-avx512f-x16.c",
    "src/f32-vrnd/gen/f32-vrndu-avx512f-x16.c",
    "src/f32-vrnd/gen/f32-vrndz-avx512f-x16.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-avx512f-rr2-lut32-p2-perm2-scalef-div-x64.c",
    "src/f32-vunary/gen/f32-vabs-avx512f-x16.c",
    "src/f32-vunary/gen/f32-vneg-avx512f-x16.c",
    "src/f32-vunary/gen/f32-vsqr-avx512f-x16.c",
    "src/x32-packw/gen/x32-packw-x16-avx512f-x4.c",
]

PROD_AVX512SKX_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-avx512skx-x16.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-avx512skx-x16.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-avx512skx-x128.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-avx512skx-x128.c",
    "src/f32-vtanh/gen/f32-vtanh-avx512skx-expm1minus-rr1-lut4-p4h3ts-perm-div-x64.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qc8-gemm/gen/qc8-gemm-1x16c8-minmax-fp32-avx512skx.c",
    "src/qc8-gemm/gen/qc8-gemm-4x16c8-minmax-fp32-avx512skx.c",
    "src/qc8-igemm/gen/qc8-igemm-1x16c8-minmax-fp32-avx512skx.c",
    "src/qc8-igemm/gen/qc8-igemm-4x16c8-minmax-fp32-avx512skx.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-avx512skx-x32.c",
    "src/qs8-gemm/gen/qs8-gemm-1x16c8-minmax-fp32-avx512skx.c",
    "src/qs8-gemm/gen/qs8-gemm-4x16c8-minmax-fp32-avx512skx.c",
    "src/qs8-igemm/gen/qs8-igemm-1x16c8-minmax-fp32-avx512skx.c",
    "src/qs8-igemm/gen/qs8-igemm-4x16c8-minmax-fp32-avx512skx.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-avx512skx-mul32-ld128-x16.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-avx512skx-mul32-ld128-x16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p32c-minmax-fp32-avx512skx-mul32.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-avx512skx-x32.c",
    "src/qu8-gemm/gen/qu8-gemm-1x16c8-minmax-fp32-avx512skx.c",
    "src/qu8-gemm/gen/qu8-gemm-4x16c8-minmax-fp32-avx512skx.c",
    "src/qu8-igemm/gen/qu8-igemm-1x16c8-minmax-fp32-avx512skx.c",
    "src/qu8-igemm/gen/qu8-igemm-4x16c8-minmax-fp32-avx512skx.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-avx512skx-mul32-ld128-x16.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-avx512skx-mul32-ld128-x16.c",
    "src/x8-lut/gen/x8-lut-avx512skx-vpshufb-x64.c",
]

PROD_AVX512VBMI_MICROKERNEL_SRCS = [
    "src/x8-lut/gen/x8-lut-avx512vbmi-vpermx2b-x128.c",
]

PROD_WASM_MICROKERNEL_SRCS = [
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-wasm-c1.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-wasm-c1.c",
    "src/f32-dwconv/gen/f32-dwconv-3p1c-minmax-wasm-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-4p1c-minmax-wasm-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-9p1c-minmax-wasm-acc2.c",
    "src/f32-dwconv/gen/f32-dwconv-25p1c-minmax-wasm-acc2.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-wasm-c1.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-wasm-c1.c",
    "src/f32-gemm/gen/f32-gemm-1x4-minmax-wasm.c",
    "src/f32-gemm/gen/f32-gemm-1x4-relu-wasm.c",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-wasm.c",
    "src/f32-gemm/gen/f32-gemm-4x4-minmax-wasm.c",
    "src/f32-gemm/gen/f32-gemm-4x4-relu-wasm.c",
    "src/f32-igemm/gen/f32-igemm-1x4-minmax-wasm.c",
    "src/f32-igemm/gen/f32-igemm-1x4-relu-wasm.c",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-wasm.c",
    "src/f32-igemm/gen/f32-igemm-4x4-minmax-wasm.c",
    "src/f32-igemm/gen/f32-igemm-4x4-relu-wasm.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-wasm-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-wasm-c1.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-wasm-c1.c",
    "src/f32-prelu/gen/f32-prelu-wasm-2x4.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-wasm-fmagic-x4.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-wasm-fmagic-x4.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vdivc-relu-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vmaxc-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vmin-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vminc-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vmulc-relu-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-wasm-x8.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-wasm-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-wasm-x4.c",
    "src/f32-velu/gen/f32-velu-wasm-rr2-p6-x6.c",
    "src/f32-vhswish/gen/f32-vhswish-wasm-x4.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c1-minmax-wasm-2x.c",
    "src/f32-vrelu/gen/f32-vrelu-wasm-x8.c",
    "src/f32-vtanh/gen/f32-vtanh-wasm-expm1minus-rr1-p6h5ts-div-x4.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p2c-minmax-fp32-wasm-fmagic.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p2c-minmax-fp32-wasm-fmagic.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p2c-minmax-fp32-wasm-fmagic.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4-minmax-fp32-wasm-fmagic.c",
    "src/qc8-gemm/gen/qc8-gemm-4x4-minmax-fp32-wasm-fmagic.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4-minmax-fp32-wasm-fmagic.c",
    "src/qc8-igemm/gen/qc8-igemm-4x4-minmax-fp32-wasm-fmagic.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p2c-minmax-fp32-wasm-fmagic.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p2c-minmax-fp32-wasm-fmagic.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4-minmax-fp32-wasm-fmagic.c",
    "src/qs8-gemm/gen/qs8-gemm-4x4-minmax-fp32-wasm-fmagic.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4-minmax-fp32-wasm-fmagic.c",
    "src/qs8-igemm/gen/qs8-igemm-4x4-minmax-fp32-wasm-fmagic.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p2c-minmax-fp32-wasm-fmagic.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p2c-minmax-fp32-wasm-fmagic.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4-minmax-fp32-wasm-fmagic.c",
    "src/qu8-gemm/gen/qu8-gemm-4x4-minmax-fp32-wasm-fmagic.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4-minmax-fp32-wasm-fmagic.c",
    "src/qu8-igemm/gen/qu8-igemm-4x4-minmax-fp32-wasm-fmagic.c",
]

PROD_WASMSIMD_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-wasmsimd-int16-x16.c",
    "src/f32-argmaxpool/f32-argmaxpool-4x-wasmsimd-c4.c",
    "src/f32-argmaxpool/f32-argmaxpool-9p8x-wasmsimd-c4.c",
    "src/f32-argmaxpool/f32-argmaxpool-9x-wasmsimd-c4.c",
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-wasmsimd-arm-c4.c",
    "src/f32-avgpool/f32-avgpool-9p8x-minmax-wasmsimd-x86-c4.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-wasmsimd-arm-c4.c",
    "src/f32-avgpool/f32-avgpool-9x-minmax-wasmsimd-x86-c4.c",
    "src/f32-conv-hwc2chw/f32-conv-hwc2chw-3x3s2p1c3x4-wasmsimd-2x2.c",
    "src/f32-dwconv/gen/f32-dwconv-3p4c-minmax-wasmsimd-arm.c",
    "src/f32-dwconv/gen/f32-dwconv-3p4c-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-3p8c-minmax-wasmsimd-x86.c",
    "src/f32-dwconv/gen/f32-dwconv-3p8c-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-4p4c-minmax-wasmsimd-arm.c",
    "src/f32-dwconv/gen/f32-dwconv-4p4c-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-minmax-wasmsimd-x86.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-3f3m3l4c4s4r-minmax-wasmsimd-arm.c",
    "src/f32-dwconv/gen/f32-dwconv-3f3m3l8c4s4r-minmax-wasmsimd-x86.c",
    "src/f32-dwconv/gen/f32-dwconv-3f3m3l4c4s4r-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-3f3m3l8c4s4r-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l4c4s4r-minmax-wasmsimd-arm.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l4c4s4r-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-9p4c-minmax-wasmsimd-arm.c",
    "src/f32-dwconv/gen/f32-dwconv-9p4c-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-minmax-wasmsimd-x86.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-wasmsimd.c",
    "src/f32-dwconv/gen/f32-dwconv-25p4c-minmax-wasmsimd-arm.c",
    "src/f32-dwconv/gen/f32-dwconv-25p4c-wasmsimd.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-wasmsimd-arm-loadsplat-2x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3p1-minmax-wasmsimd-x86-loadsplat-2x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-wasmsimd-arm-splat-1x4-acc4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-3x3s2p1-minmax-wasmsimd-x86-splat-1x4-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-wasmsimd-arm-splat-3x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5p2-minmax-wasmsimd-x86-splat-3x4.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-wasmsimd-arm-splat-1x4-acc2.c",
    "src/f32-dwconv2d-chw/gen/f32-dwconv2d-chw-5x5s2p2-minmax-wasmsimd-x86-splat-1x4-acc2.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-wasmsimd-x24.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-wasmsimd-arm-x4.c",
    "src/f32-gavgpool-cw/f32-gavgpool-cw-wasmsimd-x86-x4.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-wasmsimd-arm-c4.c",
    "src/f32-gavgpool/f32-gavgpool-7p7x-minmax-wasmsimd-x86-c4.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-wasmsimd-arm-c4.c",
    "src/f32-gavgpool/f32-gavgpool-7x-minmax-wasmsimd-x86-c4.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-wasmsimd-arm-splat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-wasmsimd-x86-splat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-relu-wasmsimd-splat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-wasmsimd-splat.c",
    "src/f32-gemm/gen/f32-gemm-4x2c4-minmax-wasmsimd-arm.c",
    "src/f32-gemm/gen/f32-gemm-4x2c4-minmax-wasmsimd-x86.c",
    "src/f32-gemm/gen/f32-gemm-4x2c4-wasmsimd.c",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-wasmsimd-x86-splat.c",
    "src/f32-gemm/gen/f32-gemm-4x8-relu-wasmsimd-splat.c",
    "src/f32-gemm/gen/f32-gemm-4x8-wasmsimd-splat.c",
    "src/f32-gemm/gen/f32-gemm-5x8-minmax-wasmsimd-arm-splat.c",
    "src/f32-gemm/gen/f32-gemm-5x8-relu-wasmsimd-splat.c",
    "src/f32-gemm/gen/f32-gemm-5x8-wasmsimd-splat.c",
    "src/f32-ibilinear-chw/gen/f32-ibilinear-chw-wasmsimd-p8.c",
    "src/f32-ibilinear/gen/f32-ibilinear-wasmsimd-c8.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-wasmsimd-arm-splat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-wasmsimd-x86-splat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-relu-wasmsimd-splat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-wasmsimd-splat.c",
    "src/f32-igemm/gen/f32-igemm-4x2c4-minmax-wasmsimd-arm.c",
    "src/f32-igemm/gen/f32-igemm-4x2c4-minmax-wasmsimd-x86.c",
    "src/f32-igemm/gen/f32-igemm-4x2c4-wasmsimd.c",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-wasmsimd-x86-splat.c",
    "src/f32-igemm/gen/f32-igemm-4x8-relu-wasmsimd-splat.c",
    "src/f32-igemm/gen/f32-igemm-4x8-wasmsimd-splat.c",
    "src/f32-igemm/gen/f32-igemm-5x8-minmax-wasmsimd-arm-splat.c",
    "src/f32-igemm/gen/f32-igemm-5x8-relu-wasmsimd-splat.c",
    "src/f32-igemm/gen/f32-igemm-5x8-wasmsimd-splat.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-wasmsimd-arm-c4.c",
    "src/f32-maxpool/f32-maxpool-9p8x-minmax-wasmsimd-x86-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-wasmsimd-arm-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9p8x-minmax-wasmsimd-x86-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-wasmsimd-arm-c4.c",
    "src/f32-pavgpool/f32-pavgpool-9x-minmax-wasmsimd-x86-c4.c",
    "src/f32-prelu/gen/f32-prelu-wasmsimd-iminmax-2x8.c",
    "src/f32-prelu/gen/f32-prelu-wasmsimd-laneselect-2x8.c",
    "src/f32-qs8-vcvt/gen/f32-qs8-vcvt-wasmsimd-magic-x32.c",
    "src/f32-qu8-vcvt/gen/f32-qu8-vcvt-wasmsimd-magic-x32.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-wasmsimd-rr2-p5-x16-acc2.c",
    "src/f32-rmax/f32-rmax-wasmsimd-arm.c",
    "src/f32-rmax/f32-rmax-wasmsimd-x86.c",
    "src/f32-spmm/gen/f32-spmm-32x1-minmax-wasmsimd-arm.c",
    "src/f32-spmm/gen/f32-spmm-32x1-minmax-wasmsimd-x86.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vadd-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vadd-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vaddc-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vaddc-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vdiv-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vdiv-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vdivc-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vdivc-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vmaxc-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vmaxc-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vmin-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vmin-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vminc-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vminc-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vmul-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vmul-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vmulc-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vmulc-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vrdivc-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vrdivc-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vrsubc-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vrsubc-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vsqrdiff-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vsqrdiffc-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vsub-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vsub-wasmsimd-x16.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-wasmsimd-arm-x16.c",
    "src/f32-vbinary/gen/f32-vsubc-minmax-wasmsimd-x86-x16.c",
    "src/f32-vbinary/gen/f32-vsubc-wasmsimd-x16.c",
    "src/f32-vclamp/gen/f32-vclamp-wasmsimd-arm-x8.c",
    "src/f32-vclamp/gen/f32-vclamp-wasmsimd-x86-x8.c",
    "src/f32-velu/gen/f32-velu-wasmsimd-arm-rr2-p6-x20.c",
    "src/f32-velu/gen/f32-velu-wasmsimd-x86-rr2-p6-x20.c",
    "src/f32-vhswish/gen/f32-vhswish-wasmsimd-x16.c",
    "src/f32-vlrelu/gen/f32-vlrelu-wasmsimd-iminmax-x8.c",
    "src/f32-vlrelu/gen/f32-vlrelu-wasmsimd-laneselect-x8.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c4-minmax-wasmsimd-arm-2x.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c4-minmax-wasmsimd-x86-2x.c",
    "src/f32-vrelu/gen/f32-vrelu-wasmsimd-x16.c",
    "src/f32-vrnd/gen/f32-vrndd-wasmsimd-x8.c",
    "src/f32-vrnd/gen/f32-vrndne-wasmsimd-x8.c",
    "src/f32-vrnd/gen/f32-vrndu-wasmsimd-x8.c",
    "src/f32-vrnd/gen/f32-vrndz-wasmsimd-x8.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-wasmsimd-rr2-p5-div-x16.c",
    "src/f32-vsqrt/gen/f32-vsqrt-wasmsimd-sqrt-x8.c",
    "src/f32-vtanh/gen/f32-tanh-wasmsimd-expm1minus-rr1-p6h5ts-div-abs-min-x16.c",
    "src/f32-vtanh/gen/f32-tanh-wasmsimd-expm1minus-rr1-p6h5ts-div-nabs-pmax-x16.c",
    "src/f32-vunary/gen/f32-vabs-wasmsimd-x8.c",
    "src/f32-vunary/gen/f32-vneg-wasmsimd-x8.c",
    "src/f32-vunary/gen/f32-vsqr-wasmsimd-x8.c",
    "src/qc8-dwconv/gen/qc8-dwconv-3p16c-minmax-fp32-wasmsimd-mul16-add16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-9p16c-minmax-fp32-wasmsimd-mul16-add16.c",
    "src/qc8-dwconv/gen/qc8-dwconv-25p16c-minmax-fp32-wasmsimd-mul16-add16.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qc8-gemm/gen/qc8-gemm-4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qc8-igemm/gen/qc8-igemm-4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qs8-dwconv/gen/qs8-dwconv-9p16c-minmax-fp32-wasmsimd-mul16-add16.c",
    "src/qs8-dwconv/gen/qs8-dwconv-25p16c-minmax-fp32-wasmsimd-mul16-add16.c",
    "src/qs8-f32-vcvt/gen/qs8-f32-vcvt-wasmsimd-x32.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7p7x-minmax-fp32-wasmsimd-c16.c",
    "src/qs8-gavgpool/gen/qs8-gavgpool-7x-minmax-fp32-wasmsimd-c16.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qs8-gemm/gen/qs8-gemm-4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qs8-igemm/gen/qs8-igemm-4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qs8-vadd/gen/qs8-vadd-minmax-wasmsimd-x32.c",
    "src/qs8-vaddc/gen/qs8-vaddc-minmax-wasmsimd-x32.c",
    "src/qs8-vcvt/gen/qs8-vcvt-wasmsimd-x16.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-wasmsimd-arm-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-wasmsimd-x86-x16.c",
    "src/qs8-vmul/gen/qs8-vmul-minmax-fp32-wasmsimd-mul32-ld64-x8.c",
    "src/qs8-vmulc/gen/qs8-vmulc-minmax-fp32-wasmsimd-mul32-ld64-x8.c",
    "src/qs16-qs8-vcvt/gen/qs16-qs8-vcvt-wasmsimd-x16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-9p8c-minmax-fp32-wasmsimd-mul16.c",
    "src/qu8-dwconv/gen/qu8-dwconv-25p8c-minmax-fp32-wasmsimd-mul16.c",
    "src/qu8-f32-vcvt/gen/qu8-f32-vcvt-wasmsimd-x32.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7p7x-minmax-fp32-wasmsimd-c16.c",
    "src/qu8-gavgpool/gen/qu8-gavgpool-7x-minmax-fp32-wasmsimd-c16.c",
    "src/qu8-gemm/gen/qu8-gemm-1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qu8-gemm/gen/qu8-gemm-4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qu8-igemm/gen/qu8-igemm-1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qu8-igemm/gen/qu8-igemm-4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c",
    "src/qu8-vadd/gen/qu8-vadd-minmax-wasmsimd-x32.c",
    "src/qu8-vaddc/gen/qu8-vaddc-minmax-wasmsimd-x32.c",
    "src/qu8-vcvt/gen/qu8-vcvt-wasmsimd-x16.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-wasmsimd-arm-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-wasmsimd-x86-x16.c",
    "src/qu8-vmul/gen/qu8-vmul-minmax-fp32-wasmsimd-mul32-ld64-x8.c",
    "src/qu8-vmulc/gen/qu8-vmulc-minmax-fp32-wasmsimd-mul32-ld64-x8.c",
    "src/s8-ibilinear/gen/s8-ibilinear-wasmsimd-dot16x2-c8.c",
    "src/s8-maxpool/s8-maxpool-9p8x-minmax-wasmsimd-c16.c",
    "src/s8-vclamp/s8-vclamp-wasmsimd-x64.c",
    "src/u8-ibilinear/gen/u8-ibilinear-wasmsimd-dot16x2-c8.c",
    "src/u8-maxpool/u8-maxpool-9p8x-minmax-wasmsimd-c16.c",
    "src/u8-vclamp/u8-vclamp-wasmsimd-x64.c",
    "src/xx-fill/xx-fill-wasmsimd-x64.c",
    "src/xx-pad/xx-pad-wasmsimd.c",
    "src/x8-lut/gen/x8-lut-wasmsimd-x32.c",
    "src/x8-transposec/gen/x8-transposec-16x16-reuse-mov-wasmsimd.c",
    "src/x16-transposec/gen/x16-transposec-8x8-reuse-mov-wasmsimd.c",
    "src/x32-packw/gen/x32-packw-x2c4-wasmsimd-x4.c",
    "src/x32-packw/gen/x32-packw-x8-wasmsimd-x4.c",
    "src/x32-transposec/gen/x32-transposec-4x4-reuse-mov-wasmsimd.c",
    "src/x32-unpool/x32-unpool-wasmsimd.c",
    "src/x32-zip/x32-zip-xm-wasmsimd.c",
    "src/x32-zip/x32-zip-x2-wasmsimd.c",
    "src/x32-zip/x32-zip-x3-wasmsimd.c",
    "src/x32-zip/x32-zip-x4-wasmsimd.c",
]

PROD_WASMRELAXEDSIMD_MICROKERNEL_SRCS = [
    "src/f16-f32-vcvt/gen/f16-f32-vcvt-wasmrelaxedsimd-int16-x16.c",
    "src/f32-dwconv/gen/f32-dwconv-3p8c-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-3p8c-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-4p8c-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l4c4s4r-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-5f5m5l4c4s4r-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-9p8c-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-dwconv/gen/f32-dwconv-25p8c-wasmrelaxedsimd-fma.c",
    "src/f32-f16-vcvt/gen/f32-f16-vcvt-wasmrelaxedsimd-x24.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-wasmrelaxedsimd-fma-splat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-relu-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-relu-wasmrelaxedsimd-fma-splat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-gemm/gen/f32-gemm-1x8-wasmrelaxedsimd-fma-splat.c",
    "src/f32-gemm/gen/f32-gemm-4x2c4-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-gemm/gen/f32-gemm-4x2c4-wasmrelaxedsimd-fma.c",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-gemm/gen/f32-gemm-4x8-relu-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-gemm/gen/f32-gemm-4x8-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-wasmrelaxedsimd-fma-splat.c",
    "src/f32-gemm/gen/f32-gemm-6x8-relu-wasmrelaxedsimd-fma-splat.c",
    "src/f32-gemm/gen/f32-gemm-6x8-wasmrelaxedsimd-fma-splat.c",
    "src/f32-ibilinear/gen/f32-ibilinear-wasmrelaxedsimd-c8.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-wasmrelaxedsimd-fma-splat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-relu-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-relu-wasmrelaxedsimd-fma-splat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-igemm/gen/f32-igemm-1x8-wasmrelaxedsimd-fma-splat.c",
    "src/f32-igemm/gen/f32-igemm-4x2c4-minmax-wasmrelaxedsimd-fma.c",
    "src/f32-igemm/gen/f32-igemm-4x2c4-wasmrelaxedsimd-fma.c",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-igemm/gen/f32-igemm-4x8-relu-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-igemm/gen/f32-igemm-4x8-wasmrelaxedsimd-fma-loadsplat.c",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-wasmrelaxedsimd-fma-splat.c",
    "src/f32-igemm/gen/f32-igemm-6x8-relu-wasmrelaxedsimd-fma-splat.c",
    "src/f32-igemm/gen/f32-igemm-6x8-wasmrelaxedsimd-fma-splat.c",
    "src/f32-prelu/gen/f32-prelu-wasmrelaxedsimd-iminmax-2x4.c",
    "src/f32-prelu/gen/f32-prelu-wasmrelaxedsimd-laneselect-2x4.c",
    "src/f32-raddstoreexpminusmax/gen/f32-raddstoreexpminusmax-wasmrelaxedsimd-rr2-p5-x16-acc2.c",
    "src/f32-velu/gen/f32-velu-wasmrelaxedsimd-fma-rr2-p6-x24.c",
    "src/f32-vlrelu/gen/f32-vlrelu-wasmrelaxedsimd-iminmax-x4.c",
    "src/f32-vlrelu/gen/f32-vlrelu-wasmrelaxedsimd-laneselect-x4.c",
    "src/f32-vmulcaddc/gen/f32-vmulcaddc-c4-minmax-wasmrelaxedsimd-fma-2x.c",
    "src/f32-vsigmoid/gen/f32-vsigmoid-wasmrelaxedsimd-fma-rr2-p5-div-x24.c",
    "src/qc8-gemm/gen/qc8-gemm-1x4c16-minmax-fp32-wasmsdot.c",
    "src/qc8-gemm/gen/qc8-gemm-4x4c16-minmax-fp32-wasmsdot.c",
    "src/qc8-igemm/gen/qc8-igemm-1x4c16-minmax-fp32-wasmsdot.c",
    "src/qc8-igemm/gen/qc8-igemm-4x4c16-minmax-fp32-wasmsdot.c",
    "src/qs8-gemm/gen/qs8-gemm-1x4c16-minmax-fp32-wasmsdot.c",
    "src/qs8-gemm/gen/qs8-gemm-4x4c16-minmax-fp32-wasmsdot.c",
    "src/qs8-igemm/gen/qs8-igemm-1x4c16-minmax-fp32-wasmsdot.c",
    "src/qs8-igemm/gen/qs8-igemm-4x4c16-minmax-fp32-wasmsdot.c",
    "src/qs8-vcvt/gen/qs8-vcvt-wasmrelaxedsimd-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-wasmrelaxedsimd-arm-x32.c",
    "src/qs8-vlrelu/gen/qs8-vlrelu-wasmrelaxedsimd-x86-x32.c",
    "src/qu8-vcvt/gen/qu8-vcvt-wasmrelaxedsimd-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-wasmrelaxedsimd-arm-x32.c",
    "src/qu8-vlrelu/gen/qu8-vlrelu-wasmrelaxedsimd-x86-x32.c",
    "src/x8-lut/gen/x8-lut-wasmpshufb-x32.c",
]

WASM32_ASM_MICROKERNEL_SRCS = [
    "src/f32-vrelu/f32-vrelu-asm-wasm32-shr-x1.S",
    "src/f32-vrelu/f32-vrelu-asm-wasm32-shr-x2.S",
    "src/f32-vrelu/f32-vrelu-asm-wasm32-shr-x4.S",
]

AARCH32_ASM_MICROKERNEL_SRCS = [
    "src/cs16-bfly4/cs16-bfly4-samples1-asm-aarch32-neon-x1.S",
    "src/cs16-bfly4/cs16-bfly4-samples1-asm-aarch32-neon-x2.S",
    "src/cs16-bfly4/cs16-bfly4-samples1-asm-aarch32-neon-x4.S",
    "src/cs16-fftr/cs16-fftr-asm-aarch32-neon-x1.S",
    "src/cs16-fftr/cs16-fftr-asm-aarch32-neon-x4.S",
    "src/f32-gemm/f32-gemm-4x4-asm-aarch32-vfp-ld64.S",
    "src/f32-gemm/f32-gemm-4x4-minmax-asm-aarch32-vfp-ld64.S",
    "src/f32-gemm/f32-gemm-4x8-minmax-asm-aarch32-neon-cortex-a55.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch32-neon-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch32-neon-prfm-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch32-neon-cortex-a7.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch32-neon-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch32-neon-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch32-neon-ld64.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch32-neon-prfm-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch32-neon-prfm-cortex-a75.S",
    "src/f32-igemm/f32-igemm-4x8-minmax-asm-aarch32-neon-cortex-a55.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch32-neon-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch32-neon-prfm-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch32-neon-cortex-a7.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch32-neon-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch32-neon-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch32-neon-ld64.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch32-neon-prfm-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch32-neon-prfm-cortex-a75.S",
    "src/qc8-dwconv/qc8-dwconv-3p8c-minmax-fp32-asm-aarch32-neonv8-mla8-cortex-a35.S",
    "src/qc8-dwconv/qc8-dwconv-3p16c-minmax-fp32-asm-aarch32-neonv8-mla8-cortex-a35.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-cortex-a35.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-cortex-a35.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-cortex-a35.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-cortex-a35.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8c4-minmax-fp32-asm-aarch32-neondot-cortex-a55.S",
    "src/qc8-gemm/gen/qc8-gemm-4x8c4-minmax-fp32-asm-aarch32-neondot-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-cortex-a35.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-cortex-a35.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neon-mlal-lane-prfm-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-cortex-a35.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-cortex-a35.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8-minmax-fp32-asm-aarch32-neonv8-mlal-lane-prfm-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8c4-minmax-fp32-asm-aarch32-neondot-cortex-a55.S",
    "src/qc8-igemm/gen/qc8-igemm-4x8c4-minmax-fp32-asm-aarch32-neondot-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8c4-minmax-rndnu-asm-aarch32-neondot-cortex-a55.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8c4-minmax-rndnu-asm-aarch32-neondot-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8c4-minmax-rndnu-asm-aarch32-neondot-cortex-a55.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8c4-minmax-rndnu-asm-aarch32-neondot-ld64.S",
    "src/qs16-qs8-vcvt/qs16-qs8-vcvt-asm-aarch32-neon-x16.S",
    "src/qu8-gemm/gen/qu8-gemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qu8-gemm/gen/qu8-gemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a53.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-ld64.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-ld64.S",
    "src/qu8-igemm/gen/qu8-igemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qu8-igemm/gen/qu8-igemm-1x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a7.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-cortex-a53.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-ld64.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a7.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8-minmax-rndnu-asm-aarch32-neon-mlal-lane-prfm-ld64.S",
    "src/u32-filterbank-accumulate/u32-filterbank-accumulate-asm-aarch32-arm-x1.S",
    "src/u32-filterbank-accumulate/u32-filterbank-accumulate-asm-aarch32-neon-x1.S",
    "src/u32-filterbank-accumulate/u32-filterbank-accumulate-asm-aarch32-neon-x2.S",
]

AARCH64_ASM_MICROKERNEL_SRCS = [
    "src/f16-gemm/gen/f16-gemm-1x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemm-1x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-gemm/gen/f16-gemm-1x16-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemm-4x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemm-4x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-gemm/gen/f16-gemm-4x16-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemm-6x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemm-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a55.S",
    "src/f16-gemm/gen/f16-gemm-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a55r0.S",
    "src/f16-gemm/gen/f16-gemm-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a75.S",
    "src/f16-gemm/gen/f16-gemm-6x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-gemm/gen/f16-gemm-6x16-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemm-8x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemminc-1x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemminc-1x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-gemm/gen/f16-gemminc-4x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemminc-4x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-gemm/gen/f16-gemminc-6x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-gemm/gen/f16-gemminc-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a55.S",
    "src/f16-gemm/gen/f16-gemminc-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a75.S",
    "src/f16-gemm/gen/f16-gemminc-6x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-gemm/gen/f16-gemminc-8x8-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-igemm/f16-igemm-1x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-igemm/f16-igemm-1x16-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-igemm/f16-igemm-4x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-igemm/f16-igemm-4x16-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f16-igemm/f16-igemm-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a55.S",
    "src/f16-igemm/f16-igemm-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a55r0.S",
    "src/f16-igemm/f16-igemm-6x16-minmax-asm-aarch64-neonfp16arith-cortex-a75.S",
    "src/f16-igemm/f16-igemm-6x16-minmax-asm-aarch64-neonfp16arith-ld32.S",
    "src/f16-igemm/f16-igemm-6x16-minmax-asm-aarch64-neonfp16arith-ld64.S",
    "src/f32-dwconv/f32-dwconv-9p4c-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-dwconv/f32-dwconv-9p4c-minmax-asm-aarch64-neonfma.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch64-neonfma-prfm-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-1x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-1x12-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemm-4x2-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-ld128.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-prfm-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-4x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-4x12-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-5x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-5x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-cortex-a73.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-ld128.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-prfm-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemm-6x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-1x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemminc-1x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-1x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemminc-1x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-1x12-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemminc-4x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemminc-4x8-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-gemm/gen/f32-gemminc-4x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-4x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemminc-4x8-minmax-asm-aarch64-neonfma-ld128.S",
    "src/f32-gemm/gen/f32-gemminc-4x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-4x12-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemminc-5x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-5x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-cortex-a73.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-ld128.S",
    "src/f32-gemm/gen/f32-gemminc-6x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-igemm/f32-igemm-1x12-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-igemm/f32-igemm-4x8-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-igemm/f32-igemm-4x12-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-igemm/f32-igemm-6x8-minmax-asm-aarch64-neonfma-cortex-a55.S",
    "src/f32-igemm/f32-igemm-6x8-minmax-asm-aarch64-neonfma-cortex-a73.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch64-neonfma-prfm-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-1x8-minmax-asm-aarch64-neonfma-prfm-ld64.S",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-igemm/gen/f32-igemm-4x2-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch64-neonfma-ld128.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch64-neonfma-prfm-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-4x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-5x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-5x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-asm-aarch64-neonfma-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-asm-aarch64-neonfma-cortex-a75.S",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-asm-aarch64-neonfma-ld64.S",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-asm-aarch64-neonfma-ld128.S",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-asm-aarch64-neonfma-prfm-cortex-a53.S",
    "src/f32-igemm/gen/f32-igemm-6x8-minmax-asm-aarch64-neonfma-prfm-cortex-a75.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qc8-gemm/gen/qc8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qc8-gemm/gen/qc8-gemm-1x16c4-minmax-fp32-asm-aarch64-neondot-ld32.S",
    "src/qc8-gemm/gen/qc8-gemm-1x16c4-minmax-fp32-asm-aarch64-neondot-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qc8-gemm/gen/qc8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qc8-gemm/gen/qc8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mull.S",
    "src/qc8-gemm/gen/qc8-gemm-2x8c16-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-cortex-a55.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld32.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld64.S",
    "src/qc8-gemm/gen/qc8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld128.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qc8-igemm/gen/qc8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qc8-igemm/gen/qc8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qc8-igemm/gen/qc8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qc8-igemm/gen/qc8-igemm-2x8c16-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-cortex-a55.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld64.S",
    "src/qc8-igemm/gen/qc8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld128.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-gemm/gen/qs8-gemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal.S",
    "src/qs8-gemm/gen/qs8-gemm-1x16c4-minmax-fp32-asm-aarch64-neondot-ld32.S",
    "src/qs8-gemm/gen/qs8-gemm-1x16c4-minmax-fp32-asm-aarch64-neondot-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-1x16c4-minmax-rndnu-asm-aarch64-neondot-ld32.S",
    "src/qs8-gemm/gen/qs8-gemm-1x16c4-minmax-rndnu-asm-aarch64-neondot-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-fp32-asm-aarch64-neon-mull.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mull.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c16-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qs8-gemm/gen/qs8-gemm-2x8c16-minmax-rndnu-asm-aarch64-neon-mlal.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x8-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-cortex-a55.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld32.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld128.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-cortex-a55.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld32.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld64.S",
    "src/qs8-gemm/gen/qs8-gemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld128.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-igemm/gen/qs8-igemm-1x8c8-minmax-rndnu-asm-aarch64-neon-mlal.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal-prfm.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c8-minmax-rndnu-asm-aarch64-neon-mlal.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c16-minmax-fp32-asm-aarch64-neon-mlal.S",
    "src/qs8-igemm/gen/qs8-igemm-2x8c16-minmax-rndnu-asm-aarch64-neon-mlal.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x8-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-fp32-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-cortex-a55.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld128.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-cortex-a55.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld64.S",
    "src/qs8-igemm/gen/qs8-igemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld128.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8c4-minmax-rndnu-asm-aarch64-neondot-cortex-a55.S",
    "src/qu8-gemm/gen/qu8-gemm-4x8c4-minmax-rndnu-asm-aarch64-neondot-ld128.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-cortex-a75.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-cortex-a75.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-cortex-a55.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld128.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-cortex-a55.S",
    "src/qu8-gemm/gen/qu8-gemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld128.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8c4-minmax-rndnu-asm-aarch64-neondot-cortex-a55.S",
    "src/qu8-igemm/gen/qu8-igemm-4x8c4-minmax-rndnu-asm-aarch64-neondot-ld128.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-cortex-a53.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-cortex-a75.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-ld64.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-cortex-a53.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-cortex-a75.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16-minmax-rndnu-asm-aarch64-neon-mlal-lane-prfm-ld64.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-cortex-a55.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16c4-minmax-fp32-asm-aarch64-neondot-ld128.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-cortex-a55.S",
    "src/qu8-igemm/gen/qu8-igemm-4x16c4-minmax-rndnu-asm-aarch64-neondot-ld128.S",
]

JIT_AARCH32_SRCS = [
    "src/f32-gemm/gen/f32-gemm-1x8-aarch32-neon-cortex-a53.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch32-neon-cortex-a7.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch32-neon-cortex-a53.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch32-neon-cortex-a55.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch32-neon-cortex-a75.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch32-neon-ld64.cc",
    "src/f32-igemm/gen/f32-igemm-1x8-aarch32-neon-cortex-a53.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch32-neon-cortex-a7.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch32-neon-cortex-a53.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch32-neon-cortex-a55.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch32-neon-cortex-a75.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch32-neon-ld64.cc",
    "src/qc8-gemm/gen/qc8-gemm-4x8-fp32-aarch32-neonv8-mlal-lane-ld64.cc",
    "src/qc8-gemm/gen/qc8-gemm-4x8c4-fp32-aarch32-neondot-ld64.cc",
    "src/qc8-igemm/gen/qc8-igemm-4x8-fp32-aarch32-neonv8-mlal-lane-ld64.cc",
    "src/qc8-igemm/gen/qc8-igemm-4x8c4-fp32-aarch32-neondot-ld64.cc",
    "src/qs8-gemm/gen/qs8-gemm-4x8-rndnu-aarch32-neon-mlal-lane-ld64.cc",
    "src/qs8-gemm/gen/qs8-gemm-4x8c4-rndnu-aarch32-neondot-ld64.cc",
    "src/qs8-igemm/gen/qs8-igemm-4x8-rndnu-aarch32-neon-mlal-lane-ld64.cc",
    "src/qs8-igemm/gen/qs8-igemm-4x8c4-rndnu-aarch32-neondot-ld64.cc",
]

JIT_AARCH64_SRCS = [
    "src/f16-gemm/gen/f16-gemm-1x16-aarch64-neonfp16arith-ld64.cc",
    "src/f16-gemm/gen/f16-gemm-4x16-aarch64-neonfp16arith-ld64.cc",
    "src/f16-gemm/gen/f16-gemm-6x16-aarch64-neonfp16arith-cortex-a55.cc",
    "src/f16-gemm/gen/f16-gemm-6x16-aarch64-neonfp16arith-cortex-a55r0.cc",
    "src/f16-gemm/gen/f16-gemm-6x16-aarch64-neonfp16arith-cortex-a75.cc",
    "src/f16-gemm/gen/f16-gemm-6x16-aarch64-neonfp16arith-ld64.cc",
    "src/f16-igemm/gen/f16-igemm-1x16-aarch64-neonfp16arith-ld64.cc",
    "src/f16-igemm/gen/f16-igemm-4x16-aarch64-neonfp16arith-ld64.cc",
    "src/f16-igemm/gen/f16-igemm-6x16-aarch64-neonfp16arith-cortex-a55.cc",
    "src/f16-igemm/gen/f16-igemm-6x16-aarch64-neonfp16arith-cortex-a55r0.cc",
    "src/f16-igemm/gen/f16-igemm-6x16-aarch64-neonfp16arith-cortex-a75.cc",
    "src/f16-igemm/gen/f16-igemm-6x16-aarch64-neonfp16arith-ld64.cc",
    "src/f32-gemm/gen/f32-gemm-1x8-aarch64-neonfma-cortex-a53.cc",
    "src/f32-gemm/gen/f32-gemm-1x8-aarch64-neonfma-cortex-a75.cc",
    "src/f32-gemm/gen/f32-gemm-1x8-aarch64-neonfma-ld64.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch64-neonfma-cortex-a53.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch64-neonfma-cortex-a55.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch64-neonfma-cortex-a75.cc",
    "src/f32-gemm/gen/f32-gemm-4x8-aarch64-neonfma-ld128.cc",
    "src/f32-gemm/gen/f32-gemm-6x8-aarch64-neonfma-cortex-a53.cc",
    "src/f32-gemm/gen/f32-gemm-6x8-aarch64-neonfma-cortex-a55.cc",
    "src/f32-gemm/gen/f32-gemm-6x8-aarch64-neonfma-cortex-a75.cc",
    "src/f32-gemm/gen/f32-gemm-6x8-aarch64-neonfma-ld128.cc",
    "src/f32-igemm/gen/f32-igemm-1x8-aarch64-neonfma-cortex-a53.cc",
    "src/f32-igemm/gen/f32-igemm-1x8-aarch64-neonfma-cortex-a75.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch64-neonfma-cortex-a53.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch64-neonfma-cortex-a55.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch64-neonfma-cortex-a75.cc",
    "src/f32-igemm/gen/f32-igemm-4x8-aarch64-neonfma-ld128.cc",
    "src/f32-igemm/gen/f32-igemm-6x8-aarch64-neonfma-cortex-a53.cc",
    "src/f32-igemm/gen/f32-igemm-6x8-aarch64-neonfma-cortex-a55.cc",
    "src/f32-igemm/gen/f32-igemm-6x8-aarch64-neonfma-cortex-a75.cc",
    "src/f32-igemm/gen/f32-igemm-6x8-aarch64-neonfma-ld128.cc",
]

MICROKERNEL_HDRS = [
    "src/xnnpack/argmaxpool.h",
    "src/xnnpack/avgpool.h",
    "src/xnnpack/conv.h",
    "src/xnnpack/dwconv.h",
    "src/xnnpack/fft.h",
    "src/xnnpack/fill.h",
    "src/xnnpack/filterbank.h",
    "src/xnnpack/gavgpool.h",
    "src/xnnpack/gemm.h",
    "src/xnnpack/ibilinear.h",
    "src/xnnpack/igemm.h",
    "src/xnnpack/lut.h",
    "src/xnnpack/maxpool.h",
    "src/xnnpack/packb.h",
    "src/xnnpack/packw.h",
    "src/xnnpack/packx.h",
    "src/xnnpack/pad.h",
    "src/xnnpack/pavgpool.h",
    "src/xnnpack/ppmm.h",
    "src/xnnpack/prelu.h",
    "src/xnnpack/raddexpminusmax.h",
    "src/xnnpack/raddextexp.h",
    "src/xnnpack/raddstoreexpminusmax.h",
    "src/xnnpack/rmax.h",
    "src/xnnpack/rmaxabs.h",
    "src/xnnpack/spmm.h",
    "src/xnnpack/transpose.h",
    "src/xnnpack/unpool.h",
    "src/xnnpack/vadd.h",
    "src/xnnpack/vbinary.h",
    "src/xnnpack/vcvt.h",
    "src/xnnpack/vlog.h",
    "src/xnnpack/vlrelu.h",
    "src/xnnpack/vlshift.h",
    "src/xnnpack/vmul.h",
    "src/xnnpack/vmulcaddc.h",
    "src/xnnpack/vscaleexpminusmax.h",
    "src/xnnpack/vscaleextexp.h",
    "src/xnnpack/vsquareabs.h",
    "src/xnnpack/vunary.h",
    "src/xnnpack/window.h",
    "src/xnnpack/zerob.h",
    "src/xnnpack/zip.h",
]

INTERNAL_MICROKERNEL_HDRS = MICROKERNEL_HDRS + [
    "src/xnnpack/cache.h",
    "src/xnnpack/intrinsics-polyfill.h",
    "src/xnnpack/math-stubs.h",
    "src/xnnpack/requantization-stubs.h",
]

filegroup(
    name = "microkernel_source_files",
    data = ALL_NEON_AARCH64_MICROKERNEL_SRCS + ALL_NEONBF16_AARCH64_MICROKERNEL_SRCS + ALL_NEONFMA_AARCH64_MICROKERNEL_SRCS + ALL_NEONFP16ARITH_AARCH64_MICROKERNEL_SRCS + ALL_ARMSIMD32_MICROKERNEL_SRCS + ALL_AVX_MICROKERNEL_SRCS + ALL_AVX2_MICROKERNEL_SRCS + ALL_AVX512F_MICROKERNEL_SRCS + ALL_AVX512SKX_MICROKERNEL_SRCS + ALL_AVX512VBMI_MICROKERNEL_SRCS + ALL_F16C_MICROKERNEL_SRCS + ALL_FMA_MICROKERNEL_SRCS + ALL_FMA3_MICROKERNEL_SRCS + ALL_FP16ARITH_MICROKERNEL_SRCS + ALL_HEXAGON_MICROKERNEL_SRCS + ALL_NEON_MICROKERNEL_SRCS + ALL_NEONBF16_MICROKERNEL_SRCS + ALL_NEONDOT_MICROKERNEL_SRCS + ALL_NEONFMA_MICROKERNEL_SRCS + ALL_NEONFP16_MICROKERNEL_SRCS + ALL_NEONFP16ARITH_MICROKERNEL_SRCS + ALL_NEONV8_MICROKERNEL_SRCS + ALL_SCALAR_MICROKERNEL_SRCS + ALL_SSE_MICROKERNEL_SRCS + ALL_SSE2_MICROKERNEL_SRCS + ALL_SSE41_MICROKERNEL_SRCS + ALL_SSSE3_MICROKERNEL_SRCS + ALL_WASM_MICROKERNEL_SRCS + ALL_WASMRELAXEDSIMD_MICROKERNEL_SRCS + ALL_WASMSIMD_MICROKERNEL_SRCS + ALL_XOP_MICROKERNEL_SRCS + AARCH32_ASM_MICROKERNEL_SRCS + AARCH64_ASM_MICROKERNEL_SRCS + WASM32_ASM_MICROKERNEL_SRCS + ["src/microparams-init.c"],
    visibility = xnnpack_visibility(),
)

filegroup(
    name = "microkernel_header_files",
    data = MICROKERNEL_HDRS + ["src/xnnpack/microparams.h"],
    visibility = xnnpack_visibility(),
)

# Collection of internal microkernel related headers that declares all the microkernel functions.
xnnpack_cc_library(
    name = "microkernels_h",
    hdrs = INTERNAL_MICROKERNEL_HDRS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "xnnpack_h",
    hdrs = ["include/xnnpack.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "common",
    hdrs = ["src/xnnpack/common.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":platform_jit",
    ],
)

xnnpack_cc_library(
    name = "microparams",
    hdrs = [
        "src/xnnpack/microparams.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
    ],
)

xnnpack_cc_library(
    name = "hardware_config",
    srcs = ["src/hardware-config.c"],
    hdrs = [
        "src/xnnpack/config.h",
        "src/xnnpack/microfnptr.h",
        "src/xnnpack/microparams.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
    ] + select({
        ":emscripten": [],
        "//conditions:default": ["@cpuinfo"],
    }),
)

xnnpack_cc_library(
    name = "hardware_config_test_mode",
    srcs = ["src/hardware-config.c"],
    hdrs = [
        "src/xnnpack/config.h",
        "src/xnnpack/microfnptr.h",
        "src/xnnpack/microparams.h",
    ],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
    ] + select({
        ":emscripten": [],
        "//conditions:default": ["@cpuinfo"],
    }),
)

xnnpack_cc_library(
    name = "microkernel_configs",
    srcs = [
        "src/argmaxpool-config.c",
        "src/avgpool-config.c",
        "src/binary-elementwise-config.c",
        "src/conv-hwc2chw-config.c",
        "src/dwconv-config.c",
        "src/dwconv2d-chw-config.c",
        "src/gavgpool-config.c",
        "src/gavgpool-cw-config.c",
        "src/gemm-config.c",
        "src/ibilinear-chw-config.c",
        "src/ibilinear-config.c",
        "src/lut32norm-config.c",
        "src/maxpool-config.c",
        "src/pavgpool-config.c",
        "src/prelu-config.c",
        "src/raddstoreexpminusmax-config.c",
        "src/rmax-config.c",
        "src/spmm-config.c",
        "src/transpose-config.c",
        "src/unary-elementwise-config.c",
        "src/unpool-config.c",
        "src/vmulcaddc-config.c",
        "src/x8-lut-config.c",
        "src/xx-fill-config.c",
        "src/xx-pad-config.c",
        "src/zip-config.c",
    ],
    hdrs = [
        "src/xnnpack/config.h",
        "src/xnnpack/microfnptr.h",
        "src/xnnpack/microparams.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":amalgam_microkernels",
        ":common",
        ":enable_assembly",
        ":enable_dwconv_multipass",
        ":enable_gemm_m_specialization",
        ":enable_jit",
        ":hardware_config",
        ":logging",
        ":microkernels_h",
        ":microparams_init",
        ":packing",
    ],
)

xnnpack_cc_library(
    name = "microkernel_configs_test_mode",
    srcs = [
        "src/binary-elementwise-config.c",
        "src/transpose-config.c",
        "src/unary-elementwise-config.c",
        "src/x8-lut-config.c",
        "src/xx-fill-config.c",
        "src/xx-pad-config.c",
    ],
    hdrs = [
        "src/xnnpack/config.h",
        "src/xnnpack/microfnptr.h",
        "src/xnnpack/microparams.h",
    ],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":enable_assembly",
        ":enable_dwconv_multipass",
        ":enable_gemm_m_specialization",
        ":enable_jit",
        ":hardware_config_test_mode",
        ":logging",
        ":microkernels_h",
        ":microparams_init",
        ":test_microkernels",
    ],
)

xnnpack_cc_library(
    name = "params",
    srcs = ["src/params.c"],
    hdrs = [
        "src/xnnpack/config.h",
        "src/xnnpack/microfnptr.h",
        "src/xnnpack/params.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":microparams",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "math",
    hdrs = ["src/xnnpack/math.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
    ],
)

xnnpack_cc_library(
    name = "prefetch",
    hdrs = ["src/xnnpack/prefetch.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
    ],
)

xnnpack_cc_library(
    name = "unaligned",
    hdrs = ["src/xnnpack/unaligned.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
    ],
)

xnnpack_cc_library(
    name = "microparams_init",
    srcs = ["src/microparams-init.c"],
    hdrs = ["src/xnnpack/microparams-init.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":math",
        ":microparams",
        ":unaligned",
        ":xnnpack_h",
        "@FP16",
    ],
)

xnnpack_cc_library(
    name = "node_type",
    hdrs = ["src/xnnpack/node-type.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "operator_type",
    hdrs = ["src/xnnpack/operator-type.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "microkernel_type",
    hdrs = ["src/xnnpack/microkernel-type.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "allocator",
    srcs = [
        "src/allocator.c",
    ],
    hdrs = ["src/xnnpack/allocator.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":math",
        ":params",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "aligned_allocator",
    hdrs = [
        "src/xnnpack/aligned-allocator.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "isa_checks",
    hdrs = [
        "src/xnnpack/isa-checks.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":hardware_config",
    ],
)

xnnpack_cc_library(
    name = "math_stubs",
    hdrs = [
        "src/xnnpack/math-stubs.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "memory",
    srcs = [
        "src/memory.c",
    ],
    hdrs = ["src/xnnpack/memory.h"],
    # Do not use xnnpack_gcc_std_copts, as it defines -std=c99, which then makes MAP_ANONYMOUS undefined
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":math",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "requantization",
    hdrs = ["src/xnnpack/requantization.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microparams",
    ],
)

xnnpack_cc_library(
    name = "requantization_stubs",
    hdrs = ["src/xnnpack/requantization-stubs.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
)

xnnpack_cc_library(
    name = "tables",
    srcs = TABLE_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
    ],
)

xnnpack_cc_library(
    name = "scalar_amalgam_microkernels",
    srcs = ["src/amalgam/gen/scalar.c"],
    aarch32_copts = ["-marm"],
    aarch32_srcs = ["src/amalgam/gen/scalar-aarch32.c"],
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
        "-ffp-contract=off",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    riscv_srcs = ["src/amalgam/gen/scalar-riscv.c"],
    wasm_srcs = ["src/amalgam/gen/scalar-wasm.c"],
    wasmrelaxedsimd_srcs = ["src/amalgam/gen/scalar-wasm.c"],
    wasmsimd_srcs = ["src/amalgam/gen/scalar-wasm.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
        "@FXdiv",
    ],
)

xnnpack_cc_library(
    name = "scalar_bench_microkernels",
    srcs = ALL_FMA_MICROKERNEL_SRCS + ALL_SCALAR_MICROKERNEL_SRCS,
    aarch32_copts = ["-marm"],
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
        "-ffp-contract=off",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
        "@FXdiv",
    ],
)

xnnpack_cc_library(
    name = "scalar_prod_microkernels",
    srcs = PROD_SCALAR_MICROKERNEL_SRCS,
    aarch32_copts = ["-marm"],
    aarch32_srcs = PROD_SCALAR_AARCH32_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
        "-ffp-contract=off",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    riscv_srcs = PROD_SCALAR_RISCV_MICROKERNEL_SRCS,
    wasm_srcs = PROD_SCALAR_WASM_MICROKERNEL_SRCS,
    wasmrelaxedsimd_srcs = PROD_SCALAR_WASM_MICROKERNEL_SRCS,
    wasmsimd_srcs = PROD_SCALAR_WASM_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
        "@FXdiv",
    ],
)

xnnpack_cc_library(
    name = "scalar_test_microkernels",
    srcs = ALL_FMA_MICROKERNEL_SRCS + ALL_SCALAR_MICROKERNEL_SRCS,
    aarch32_copts = ["-marm"],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
        "-ffp-contract=off",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
        "@FXdiv",
    ],
)

xnnpack_cc_library(
    name = "wasm_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    wasm_srcs = ["src/amalgam/gen/wasm.c"],
    wasmrelaxedsimd_srcs = [
        "src/amalgam/gen/wasm.c",
        "src/amalgam/gen/wasmrelaxedsimd.c",
        "src/amalgam/gen/wasmsimd.c",
    ],
    wasmsimd_srcs = [
        "src/amalgam/gen/wasm.c",
        "src/amalgam/gen/wasmsimd.c",
    ],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "wasm_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    wasm_srcs = ALL_WASM_MICROKERNEL_SRCS,
    wasmrelaxedsimd_srcs = ALL_WASM_MICROKERNEL_SRCS + ALL_WASMSIMD_MICROKERNEL_SRCS + ALL_WASMRELAXEDSIMD_MICROKERNEL_SRCS,
    wasmsimd_srcs = ALL_WASM_MICROKERNEL_SRCS + ALL_WASMSIMD_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "wasm_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    wasm_srcs = PROD_WASM_MICROKERNEL_SRCS,
    wasmrelaxedsimd_srcs = PROD_WASM_MICROKERNEL_SRCS + PROD_WASMSIMD_MICROKERNEL_SRCS + PROD_WASMRELAXEDSIMD_MICROKERNEL_SRCS,
    wasmsimd_srcs = PROD_WASM_MICROKERNEL_SRCS + PROD_WASMSIMD_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "wasm_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    wasm_srcs = ALL_WASM_MICROKERNEL_SRCS,
    wasmrelaxedsimd_srcs = ALL_WASM_MICROKERNEL_SRCS + ALL_WASMSIMD_MICROKERNEL_SRCS + ALL_WASMRELAXEDSIMD_MICROKERNEL_SRCS,
    wasmsimd_srcs = ALL_WASM_MICROKERNEL_SRCS + ALL_WASMSIMD_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "armsimd32_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv6",
        "-mfpu=vfp",
        "-munaligned-access",
    ],
    aarch32_srcs = ["src/amalgam/gen/armsimd32.c"],
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "armsimd32_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv6",
        "-mfpu=vfp",
        "-munaligned-access",
    ],
    aarch32_srcs = ALL_ARMSIMD32_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "armsimd32_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv6",
        "-mfpu=vfp",
        "-munaligned-access",
    ],
    aarch32_srcs = PROD_ARMSIMD32_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "armsimd32_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv6",
        "-mfpu=vfp",
        "-munaligned-access",
    ],
    aarch32_srcs = ALL_ARMSIMD32_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts() + [
        "-fno-fast-math",
        "-fno-math-errno",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fp16arith_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        # GCC emits wrong directives for assembler with -mfpu=fp-armv8
        "-mfpu=neon-fp-armv8",
        # For vsqrth_f16 polyfill using sqrtf
        "-fno-math-errno",
        # For vminh_f16/vmaxh_f16 polyfills using compare + select
        "-ffinite-math-only",
    ],
    aarch32_srcs = ["src/amalgam/gen/fp16arith.c"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fp16arith_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        # GCC emits wrong directives for assembler with -mfpu=fp-armv8
        "-mfpu=neon-fp-armv8",
        # For vsqrth_f16 polyfill using sqrtf
        "-fno-math-errno",
        # For vminh_f16/vmaxh_f16 polyfills using compare + select
        "-ffinite-math-only",
    ],
    aarch32_srcs = ALL_FP16ARITH_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+fp16"],
    aarch64_srcs = ALL_FP16ARITH_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fp16arith_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        # GCC emits wrong directives for assembler with -mfpu=fp-armv8
        "-mfpu=neon-fp-armv8",
        # For vsqrth_f16 polyfill using sqrtf
        "-fno-math-errno",
        # For vminh_f16/vmaxh_f16 polyfills using compare + select
        "-ffinite-math-only",
    ],
    aarch32_srcs = PROD_FP16ARITH_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fp16arith_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        # GCC emits wrong directives for assembler with -mfpu=fp-armv8
        "-mfpu=neon-fp-armv8",
        # For vsqrth_f16 polyfill using sqrtf
        "-fno-math-errno",
        # For vminh_f16/vmaxh_f16 polyfills using compare + select
        "-ffinite-math-only",
    ],
    aarch32_srcs = ALL_FP16ARITH_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+fp16"],
    aarch64_srcs = ALL_FP16ARITH_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neon_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon",
    ],
    aarch32_srcs = ["src/amalgam/gen/neon.c"],
    aarch64_srcs = [
        "src/amalgam/gen/neon-aarch64.c",
        "src/amalgam/gen/neon.c",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neon_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon",
    ],
    aarch32_srcs = ALL_NEON_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEON_MICROKERNEL_SRCS + ALL_NEON_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neon_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon",
    ],
    aarch32_srcs = PROD_NEON_MICROKERNEL_SRCS,
    aarch64_srcs = PROD_NEON_MICROKERNEL_SRCS + PROD_NEON_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neon_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon",
    ],
    aarch32_srcs = ALL_NEON_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEON_MICROKERNEL_SRCS + ALL_NEON_AARCH64_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-fp16",
    ],
    aarch32_srcs = ["src/amalgam/gen/neonfp16.c"],
    aarch64_srcs = ["src/amalgam/gen/neonfp16.c"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-fp16",
    ],
    aarch32_srcs = ALL_NEONFP16_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEONFP16_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-fp16",
    ],
    aarch32_srcs = PROD_NEONFP16_MICROKERNEL_SRCS,
    aarch64_srcs = PROD_NEONFP16_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-fp16",
    ],
    aarch32_srcs = ALL_NEONFP16_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEONFP16_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfma_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-vfpv4",
    ],
    aarch32_srcs = ["src/amalgam/gen/neonfma.c"],
    aarch64_srcs = ["src/amalgam/gen/neonfma.c"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfma_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-vfpv4",
    ],
    aarch32_srcs = ALL_NEONFMA_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEONFMA_MICROKERNEL_SRCS + ALL_NEONFMA_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfma_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-vfpv4",
    ],
    aarch32_srcs = PROD_NEONFMA_MICROKERNEL_SRCS,
    aarch64_srcs = PROD_NEONFMA_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfma_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv7-a",
        "-mfpu=neon-vfpv4",
    ],
    aarch32_srcs = ALL_NEONFMA_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEONFMA_MICROKERNEL_SRCS + ALL_NEONFMA_AARCH64_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonv8_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8-a",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ["src/amalgam/gen/neonv8.c"],
    aarch64_srcs = ["src/amalgam/gen/neonv8.c"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonv8_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8-a",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ALL_NEONV8_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEONV8_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonv8_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8-a",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = PROD_NEONV8_MICROKERNEL_SRCS,
    aarch64_srcs = PROD_NEONV8_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonv8_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8-a",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ALL_NEONV8_MICROKERNEL_SRCS,
    aarch64_srcs = ALL_NEONV8_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16arith_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ["src/amalgam/gen/neonfp16arith.c"],
    aarch64_copts = ["-march=armv8.2-a+fp16"],
    aarch64_srcs = [
        "src/amalgam/gen/neonfp16arith-aarch64.c",
        "src/amalgam/gen/neonfp16arith.c",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16arith_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ALL_NEONFP16ARITH_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+fp16"],
    aarch64_srcs = ALL_NEONFP16ARITH_MICROKERNEL_SRCS + ALL_NEONFP16ARITH_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16arith_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = PROD_NEONFP16ARITH_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+fp16"],
    aarch64_srcs = PROD_NEONFP16ARITH_MICROKERNEL_SRCS + PROD_NEONFP16ARITH_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonfp16arith_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+fp16",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ALL_NEONFP16ARITH_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+fp16"],
    aarch64_srcs = ALL_NEONFP16ARITH_MICROKERNEL_SRCS + ALL_NEONFP16ARITH_AARCH64_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonbf16_bench_microkernels",
    aarch64_copts = ["-march=armv8.2-a+bf16"],
    aarch64_srcs = ALL_NEONBF16_MICROKERNEL_SRCS + ALL_NEONBF16_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":params",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonbf16_prod_microkernels",
    aarch64_copts = ["-march=armv8.2-a+bf16"],
    aarch64_srcs = PROD_NEONBF16_MICROKERNEL_SRCS + PROD_NEONBF16_AARCH64_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":params",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neonbf16_test_microkernels",
    aarch64_copts = ["-march=armv8.2-a+bf16"],
    aarch64_srcs = ALL_NEONBF16_MICROKERNEL_SRCS + ALL_NEONBF16_AARCH64_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":params",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neondot_amalgam_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+dotprod",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ["src/amalgam/gen/neondot.c"],
    aarch64_copts = ["-march=armv8.2-a+dotprod"],
    aarch64_srcs = ["src/amalgam/gen/neondot.c"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neondot_bench_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+dotprod",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ALL_NEONDOT_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+dotprod"],
    aarch64_srcs = ALL_NEONDOT_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neondot_prod_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+dotprod",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = PROD_NEONDOT_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+dotprod"],
    aarch64_srcs = PROD_NEONDOT_MICROKERNEL_SRCS,
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "neondot_test_microkernels",
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+dotprod",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = ALL_NEONDOT_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+dotprod"],
    aarch64_srcs = ALL_NEONDOT_MICROKERNEL_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse2_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse2"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = [
        "src/amalgam/gen/sse.c",
        "src/amalgam/gen/sse2.c",
    ],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse2_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse2"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ALL_SSE_MICROKERNEL_SRCS + ALL_SSE2_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse2_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse2"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = PROD_SSE_MICROKERNEL_SRCS + PROD_SSE2_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse2_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse2"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ALL_SSE_MICROKERNEL_SRCS + ALL_SSE2_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "ssse3_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mssse3"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ["src/amalgam/gen/ssse3.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "ssse3_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mssse3"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ALL_SSSE3_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "ssse3_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mssse3"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = PROD_SSSE3_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "ssse3_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mssse3"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ALL_SSSE3_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse41_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse4.1"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ["src/amalgam/gen/sse41.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse41_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse4.1"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ALL_SSE41_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse41_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse4.1"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = PROD_SSE41_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "sse41_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-msse4.1"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:SSE2"],
    x86_srcs = ALL_SSE41_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ["src/amalgam/gen/avx.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_AVX_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = PROD_AVX_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_AVX_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "f16c_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mf16c"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ["src/amalgam/gen/f16c.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "f16c_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mf16c"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_F16C_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "f16c_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mf16c"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = PROD_F16C_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "f16c_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mf16c"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_F16C_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "xop_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mxop"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ["src/amalgam/gen/xop.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "xop_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mxop"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_XOP_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "xop_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mxop"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = PROD_XOP_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "xop_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mxop"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_XOP_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fma3_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ["src/amalgam/gen/fma3.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fma3_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_FMA3_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fma3_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = PROD_FMA3_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "fma3_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX"],
    msvc_x86_64_copts = ["/arch:AVX"],
    x86_srcs = ALL_FMA3_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx2_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
        "-mavx2",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX2"],
    msvc_x86_64_copts = ["/arch:AVX2"],
    x86_srcs = ["src/amalgam/gen/avx2.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx2_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
        "-mavx2",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX2"],
    msvc_x86_64_copts = ["/arch:AVX2"],
    x86_srcs = ALL_AVX2_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx2_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
        "-mavx2",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX2"],
    msvc_x86_64_copts = ["/arch:AVX2"],
    x86_srcs = PROD_AVX2_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx2_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mf16c",
        "-mfma",
        "-mavx2",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX2"],
    msvc_x86_64_copts = ["/arch:AVX2"],
    x86_srcs = ALL_AVX2_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512f_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx512f"],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ["src/amalgam/gen/avx512f.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512f_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx512f"],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ALL_AVX512F_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512f_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx512f"],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = PROD_AVX512F_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512f_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = ["-mavx512f"],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ALL_AVX512F_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512skx_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ["src/amalgam/gen/avx512skx.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512skx_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ALL_AVX512SKX_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512skx_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = PROD_AVX512SKX_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512skx_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ALL_AVX512SKX_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512vbmi_amalgam_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
        "-mavx512vbmi",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ["src/amalgam/gen/avx512vbmi.c"],
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512vbmi_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
        "-mavx512vbmi",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ALL_AVX512VBMI_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512vbmi_prod_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
        "-mavx512vbmi",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = PROD_AVX512VBMI_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "avx512vbmi_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    gcc_x86_copts = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
        "-mavx512vbmi",
    ],
    mingw_copts = ["-fno-asynchronous-unwind-tables"],
    msvc_copts = xnnpack_msvc_std_copts(),
    msvc_x86_32_copts = ["/arch:AVX512"],
    msvc_x86_64_copts = ["/arch:AVX512"],
    msys_copts = ["-fno-asynchronous-unwind-tables"],
    x86_srcs = ALL_AVX512VBMI_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "rvv_bench_microkernels",
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    riscv_copts = [
        "-march=rv64gcv",
    ],
    riscv_srcs = ALL_RVV_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "rvv_test_microkernels",
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    riscv_copts = [
        "-march=rv64gcv",
    ],
    riscv_srcs = ALL_RVV_MICROKERNEL_SRCS,
    deps = [
        ":common",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":prefetch",
        ":tables",
        ":unaligned",
    ],
)

xnnpack_cc_library(
    name = "asm_microkernels",
    hdrs = ["src/xnnpack/assembly.h"],
    aarch32_copts = [
        "-marm",
        "-march=armv8.2-a+dotprod",
        "-mfpu=neon-fp-armv8",
    ],
    aarch32_srcs = AARCH32_ASM_MICROKERNEL_SRCS,
    aarch64_copts = ["-march=armv8.2-a+fp16+dotprod"],
    aarch64_srcs = AARCH64_ASM_MICROKERNEL_SRCS,
    wasm_srcs = WASM32_ASM_MICROKERNEL_SRCS,
    wasmrelaxedsimd_srcs = WASM32_ASM_MICROKERNEL_SRCS,
    wasmsimd_srcs = WASM32_ASM_MICROKERNEL_SRCS,
)

xnnpack_cc_library(
    name = "log_level_default",
    defines = select({
        # No logging in optimized mode
        ":optimized_build": ["XNN_LOG_LEVEL=0"],
        # Info logging in debug mode.  Use `--define=xnn_log_level=debug` for full logging.
        ":debug_build": ["XNN_LOG_LEVEL=4"],
        # Error-only logging in default (fastbuild) mode
        "//conditions:default": ["XNN_LOG_LEVEL=2"],
    }),
)

xnnpack_cc_library(
    name = "logging",
    srcs = [
        "src/enums/datatype-strings.c",
        "src/enums/microkernel-type.c",
        "src/enums/node-type.c",
        "src/enums/operator-type.c",
        "src/log.c",
    ],
    hdrs = ["src/xnnpack/log.h"],
    copts = select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_log_to_stdio_explicit_true": ["-DXNN_LOG_TO_STDIO=1"],
        "//conditions:default": [],
    }),
    defines = select({
        ":xnn_log_level_explicit_none": ["XNN_LOG_LEVEL=0"],
        ":xnn_log_level_explicit_fatal": ["XNN_LOG_LEVEL=1"],
        ":xnn_log_level_explicit_error": ["XNN_LOG_LEVEL=2"],
        ":xnn_log_level_explicit_warning": ["XNN_LOG_LEVEL=3"],
        ":xnn_log_level_explicit_info": ["XNN_LOG_LEVEL=4"],
        ":xnn_log_level_explicit_debug": ["XNN_LOG_LEVEL=5"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    visibility = xnnpack_visibility(),
    deps = select({
        ":xnn_log_level_explicit_none": [],
        ":xnn_log_level_explicit_fatal": [],
        ":xnn_log_level_explicit_error": [],
        ":xnn_log_level_explicit_warning": [],
        ":xnn_log_level_explicit_info": [],
        ":xnn_log_level_explicit_debug": [],
        "//conditions:default": [":log_level_default"],
    }) + [
        ":common",
        ":microkernel_type",
        ":node_type",
        ":operator_type",
        ":xnnpack_h",
    ],
)

xnnpack_aggregate_library(
    name = "amalgam_microkernels",
    aarch32_deps = [
        ":armsimd32_amalgam_microkernels",
        ":neon_amalgam_microkernels",
        ":neonfp16_amalgam_microkernels",
        ":neonfma_amalgam_microkernels",
        ":neonv8_amalgam_microkernels",
        ":asm_microkernels",
    ],
    aarch64_deps = [
        ":neon_amalgam_microkernels",
        ":neonfp16_amalgam_microkernels",
        ":neonfma_amalgam_microkernels",
        ":neonv8_amalgam_microkernels",
        ":asm_microkernels",
    ],
    defines = select({
        ":arm_fp16_scalar_enabled": ["XNN_ENABLE_ARM_FP16_SCALAR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_SCALAR=0"],
    }) + select({
        ":arm_fp16_vector_enabled": ["XNN_ENABLE_ARM_FP16_VECTOR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_VECTOR=0"],
    }) + select({
        ":arm_bf16_enabled": ["XNN_ENABLE_ARM_BF16=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_BF16=0"],
    }) + select({
        ":arm_dotprod_enabled": ["XNN_ENABLE_ARM_DOTPROD=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_DOTPROD=0"],
    }),
    generic_deps = [
        ":scalar_amalgam_microkernels",
    ] + select({
        ":arm_fp16_scalar_enabled": [":fp16arith_amalgam_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_fp16_vector_enabled": [":neonfp16arith_amalgam_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_bf16_enabled": [":neonbf16_prod_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_dotprod_enabled": [":neondot_amalgam_microkernels"],
        "//conditions:default": [],
    }),
    wasm_deps = [
        ":wasm_amalgam_microkernels",
        ":asm_microkernels",
    ],
    wasmrelaxedsimd_deps = [
        ":wasm_amalgam_microkernels",
        ":asm_microkernels",
    ],
    wasmsimd_deps = [
        ":wasm_amalgam_microkernels",
        ":asm_microkernels",
    ],
    x86_deps = [
        ":sse2_amalgam_microkernels",
        ":ssse3_amalgam_microkernels",
        ":sse41_amalgam_microkernels",
        ":avx_amalgam_microkernels",
        ":f16c_amalgam_microkernels",
        ":xop_amalgam_microkernels",
        ":fma3_amalgam_microkernels",
        ":avx2_amalgam_microkernels",
        ":avx512f_amalgam_microkernels",
        ":avx512skx_amalgam_microkernels",
        ":avx512vbmi_amalgam_microkernels",
    ],
)

xnnpack_aggregate_library(
    name = "bench_microkernels",
    aarch32_deps = [
        ":armsimd32_bench_microkernels",
        ":neon_bench_microkernels",
        ":neonfp16_bench_microkernels",
        ":neonfma_bench_microkernels",
        ":neonv8_bench_microkernels",
        ":asm_microkernels",
    ],
    aarch64_deps = [
        ":neon_bench_microkernels",
        ":neonfp16_bench_microkernels",
        ":neonfma_bench_microkernels",
        ":neonv8_bench_microkernels",
        ":asm_microkernels",
    ],
    defines = select({
        ":arm_fp16_scalar_enabled": ["XNN_ENABLE_ARM_FP16_SCALAR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_SCALAR=0"],
    }) + select({
        ":arm_fp16_vector_enabled": ["XNN_ENABLE_ARM_FP16_VECTOR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_VECTOR=0"],
    }) + select({
        ":arm_bf16_enabled": ["XNN_ENABLE_ARM_BF16=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_BF16=0"],
    }) + select({
        ":arm_dotprod_enabled": ["XNN_ENABLE_ARM_DOTPROD=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_DOTPROD=0"],
    }) + select({
        ":riscv_vector_enabled": ["XNN_ENABLE_RISCV_VECTOR=1"],
        "//conditions:default": ["XNN_ENABLE_RISCV_VECTOR=0"],
    }),
    generic_deps = [
        ":scalar_bench_microkernels",
    ] + select({
        ":arm_fp16_scalar_enabled": [":fp16arith_bench_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_fp16_vector_enabled": [":neonfp16arith_bench_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_bf16_enabled": [":neonbf16_bench_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_dotprod_enabled": [":neondot_bench_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":riscv_vector_enabled": [":rvv_bench_microkernels"],
        "//conditions:default": [],
    }),
    wasm_deps = [
        ":wasm_bench_microkernels",
        ":asm_microkernels",
    ],
    wasmrelaxedsimd_deps = [
        ":wasm_bench_microkernels",
        ":asm_microkernels",
    ],
    wasmsimd_deps = [
        ":wasm_bench_microkernels",
        ":asm_microkernels",
    ],
    x86_deps = [
        ":sse2_bench_microkernels",
        ":ssse3_bench_microkernels",
        ":sse41_bench_microkernels",
        ":avx_bench_microkernels",
        ":f16c_bench_microkernels",
        ":xop_bench_microkernels",
        ":fma3_bench_microkernels",
        ":avx2_bench_microkernels",
        ":avx512f_bench_microkernels",
        ":avx512skx_bench_microkernels",
        ":avx512vbmi_bench_microkernels",
    ],
)

xnnpack_aggregate_library(
    name = "prod_microkernels",
    aarch32_deps = [
        ":armsimd32_prod_microkernels",
        ":neon_prod_microkernels",
        ":neonfp16_prod_microkernels",
        ":neonfma_prod_microkernels",
        ":neonv8_prod_microkernels",
        ":asm_microkernels",
    ],
    aarch64_deps = [
        ":neon_prod_microkernels",
        ":neonfp16_prod_microkernels",
        ":neonfma_prod_microkernels",
        ":neonv8_prod_microkernels",
        ":asm_microkernels",
    ],
    defines = select({
        ":arm_fp16_scalar_enabled": ["XNN_ENABLE_ARM_FP16_SCALAR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_SCALAR=0"],
    }) + select({
        ":arm_fp16_vector_enabled": ["XNN_ENABLE_ARM_FP16_VECTOR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_VECTOR=0"],
    }) + select({
        ":arm_bf16_enabled": ["XNN_ENABLE_ARM_BF16=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_BF16=0"],
    }) + select({
        ":arm_dotprod_enabled": ["XNN_ENABLE_ARM_DOTPROD=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_DOTPROD=0"],
    }),
    generic_deps = [
        ":scalar_prod_microkernels",
    ] + select({
        ":arm_fp16_scalar_enabled": [":fp16arith_prod_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_fp16_vector_enabled": [":neonfp16arith_prod_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_bf16_enabled": [":neonbf16_prod_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_dotprod_enabled": [":neondot_prod_microkernels"],
        "//conditions:default": [],
    }),
    wasm_deps = [
        ":wasm_prod_microkernels",
        ":asm_microkernels",
    ],
    wasmrelaxedsimd_deps = [
        ":wasm_prod_microkernels",
        ":asm_microkernels",
    ],
    wasmsimd_deps = [
        ":wasm_prod_microkernels",
        ":asm_microkernels",
    ],
    x86_deps = [
        ":sse2_prod_microkernels",
        ":ssse3_prod_microkernels",
        ":sse41_prod_microkernels",
        ":avx_prod_microkernels",
        ":f16c_prod_microkernels",
        ":xop_prod_microkernels",
        ":fma3_prod_microkernels",
        ":avx2_prod_microkernels",
        ":avx512f_prod_microkernels",
        ":avx512skx_prod_microkernels",
        ":avx512vbmi_prod_microkernels",
    ],
)

xnnpack_aggregate_library(
    name = "test_microkernels",
    aarch32_deps = [
        ":armsimd32_test_microkernels",
        ":neon_test_microkernels",
        ":neonfp16_test_microkernels",
        ":neonfma_test_microkernels",
        ":neonv8_test_microkernels",
        ":asm_microkernels",
    ],
    aarch64_deps = [
        ":neon_test_microkernels",
        ":neonfp16_test_microkernels",
        ":neonfma_test_microkernels",
        ":neonv8_test_microkernels",
        ":asm_microkernels",
    ],
    defines = select({
        ":arm_fp16_scalar_enabled": ["XNN_ENABLE_ARM_FP16_SCALAR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_SCALAR=0"],
    }) + select({
        ":arm_fp16_vector_enabled": ["XNN_ENABLE_ARM_FP16_VECTOR=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_FP16_VECTOR=0"],
    }) + select({
        ":arm_bf16_enabled": ["XNN_ENABLE_ARM_BF16=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_BF16=0"],
    }) + select({
        ":arm_dotprod_enabled": ["XNN_ENABLE_ARM_DOTPROD=1"],
        "//conditions:default": ["XNN_ENABLE_ARM_DOTPROD=0"],
    }) + select({
        ":riscv_vector_enabled": ["XNN_ENABLE_RISCV_VECTOR=1"],
        "//conditions:default": ["XNN_ENABLE_RISCV_VECTOR=0"],
    }),
    generic_deps = [
        ":scalar_test_microkernels",
    ] + select({
        ":arm_fp16_scalar_enabled": [":fp16arith_test_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_fp16_vector_enabled": [":neonfp16arith_test_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_bf16_enabled": [":neonbf16_test_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":arm_dotprod_enabled": [":neondot_test_microkernels"],
        "//conditions:default": [],
    }) + select({
        ":riscv_vector_enabled": [":rvv_test_microkernels"],
        "//conditions:default": [],
    }),
    wasm_deps = [
        ":wasm_test_microkernels",
        ":asm_microkernels",
    ],
    wasmrelaxedsimd_deps = [
        ":wasm_test_microkernels",
        ":asm_microkernels",
    ],
    wasmsimd_deps = [
        ":wasm_test_microkernels",
        ":asm_microkernels",
    ],
    x86_deps = [
        ":sse2_test_microkernels",
        ":ssse3_test_microkernels",
        ":sse41_test_microkernels",
        ":avx_test_microkernels",
        ":f16c_test_microkernels",
        ":xop_test_microkernels",
        ":fma3_test_microkernels",
        ":avx2_test_microkernels",
        ":avx512f_test_microkernels",
        ":avx512skx_test_microkernels",
        ":avx512vbmi_test_microkernels",
    ],
)

xnnpack_cc_library(
    name = "im2col",
    srcs = ["src/im2col.c"],
    hdrs = [
        "src/xnnpack/im2col.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [":common"],
)

xnnpack_cc_library(
    name = "indirection",
    srcs = ["src/indirection.c"],
    hdrs = ["src/xnnpack/indirection.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":operator_h",
        ":xnnpack_h",
        "@FP16",
        "@FXdiv",
    ],
)

xnnpack_cc_library(
    name = "indirection_test_mode",
    srcs = ["src/indirection.c"],
    hdrs = ["src/xnnpack/indirection.h"],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":operator_h",
        "@FP16",
        "@FXdiv",
    ],
)

xnnpack_cc_library(
    name = "packing",
    srcs = ["src/packing.c"],
    hdrs = ["src/xnnpack/pack.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":operator_h",
        ":unaligned",
        "@FP16",
    ],
)

xnnpack_cc_library(
    name = "packing_test_mode",
    srcs = ["src/packing.c"],
    hdrs = ["src/xnnpack/pack.h"],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":operator_h",
        ":unaligned",
        "@FP16",
    ],
)

cc_library(
    name = "enable_assembly",
    defines = select({
        ":xnn_enable_assembly_explicit_true": ["XNN_ENABLE_ASSEMBLY=1"],
        ":xnn_enable_assembly_explicit_false": ["XNN_ENABLE_ASSEMBLY=0"],
        "//conditions:default": ["XNN_ENABLE_ASSEMBLY=1"],
    }),
)

cc_library(
    name = "enable_sparse",
    defines = select({
        ":xnn_enable_sparse_explicit_true": ["XNN_ENABLE_SPARSE=1"],
        ":xnn_enable_sparse_explicit_false": ["XNN_ENABLE_SPARSE=0"],
        "//conditions:default": ["XNN_ENABLE_SPARSE=1"],
    }),
)

cc_library(
    name = "enable_jit",
    defines = select({
        ":xnn_enable_jit_explicit_true": ["XNN_ENABLE_JIT=1"],
        ":xnn_enable_jit_explicit_false": ["XNN_ENABLE_JIT=0"],
        "//conditions:default": ["XNN_ENABLE_JIT=0"],
    }),
)

cc_library(
    name = "enable_gemm_m_specialization",
    defines = select({
        ":xnn_enable_gemm_m_specialization_explicit_true": ["XNN_ENABLE_GEMM_M_SPECIALIZATION=1"],
        ":xnn_enable_gemm_m_specialization_explicit_false": ["XNN_ENABLE_GEMM_M_SPECIALIZATION=0"],
        "//conditions:default": ["XNN_ENABLE_GEMM_M_SPECIALIZATION=1"],
    }),
)

cc_library(
    name = "enable_dwconv_multipass",
    defines = select({
        ":xnn_enable_dwconv_multipass_explicit_true": ["XNN_ENABLE_DWCONV_MULTIPASS=1"],
        ":xnn_enable_dwconv_multipass_explicit_false": ["XNN_ENABLE_DWCONV_MULTIPASS=0"],
        "//conditions:default": ["XNN_ENABLE_DWCONV_MULTIPASS=0"],
    }),
)

cc_library(
    name = "platform_jit",
    defines = select({
        ":xnn_platform_jit_explicit_true": ["XNN_PLATFORM_JIT=1"],
        ":xnn_platform_jit_explicit_false": ["XNN_PLATFORM_JIT=0"],
        # A constant that is ignored and not used anywhere so that by default we set XNN_PLATFORM_JIT based on actual platform values.
        "//conditions:default": ["XNN_IGNORED_PLATFORM_JIT=0"],
    }),
)

xnnpack_cc_library(
    name = "cache",
    srcs = ["src/cache.c"],
    hdrs = ["src/xnnpack/cache.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":allocator",
        ":common",
        ":logging",
        ":math",
        ":memory",
        ":mutex",
        ":xnnpack_h",
    ],
)

# Define a library with just the header to remove circular dependencies:
# operator-run (compute) <-> operators.
xnnpack_cc_library(
    name = "compute_h",
    hdrs = [
        "src/xnnpack/compute.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":params",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "microkernel_utils",
    srcs = ["src/microkernel-utils.c"],
    hdrs = ["src/xnnpack/microkernel-utils.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
    ],
)

xnnpack_cc_library(
    name = "post_operation",
    srcs = [
        "src/operators/post-operation.c",
    ],
    hdrs = [
        "src/xnnpack/post-operation.h",
    ],
    deps = [
        ":allocator",
        ":microkernel_configs",
        ":microparams",
        ":params",
    ],
)

# Define a library with just the header to remove circular dependencies:
# indirection <-> operators.
xnnpack_cc_library(
    name = "operator_h",
    hdrs = [
        "src/xnnpack/operator.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":allocator",
        ":cache",
        ":compute_h",
        ":microkernel_type",
        ":operator_type",
        ":params",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "operator_utils",
    srcs = ["src/operator-utils.c"],
    hdrs = ["src/xnnpack/operator-utils.h"],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":cache",
        ":common",
        ":math",
        ":operator_h",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "operators",
    srcs = OPERATOR_SRCS,
    hdrs = [
        "src/xnnpack/compute.h",
        "src/xnnpack/operator.h",
    ],
    copts = select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":allocator",
        ":cache",
        ":common",
        ":enable_gemm_m_specialization",
        ":enable_jit",
        ":indirection",
        ":jit",
        ":logging",
        ":math",
        ":microkernel_configs",
        ":microkernel_type",
        ":microkernel_utils",
        ":microparams_init",
        ":normalization",
        ":operator_type",
        ":operator_utils",
        ":packing",
        ":params",
        ":post_operation",
        ":xnnpack_h",
        "@FP16",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "operators_test_mode",
    srcs = OPERATOR_SRCS,
    hdrs = [
        "src/xnnpack/compute.h",
        "src/xnnpack/operator.h",
    ],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ] + select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":allocator",
        ":cache",
        ":common",
        ":enable_gemm_m_specialization",
        ":enable_jit",
        ":indirection_test_mode",
        ":jit_test_mode",
        ":logging",
        ":math",
        ":microkernel_configs_test_mode",
        ":microkernel_type",
        ":microkernel_utils",
        ":microparams_init",
        ":normalization_test_mode",
        ":operator_utils",
        ":packing_test_mode",
        ":params",
        ":post_operation",
        ":xnnpack_h",
        "@FP16",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "jit",
    srcs = [
        "src/jit/aarch32-assembler.cc",
        "src/jit/aarch64-assembler.cc",
        "src/jit/assembler.cc",
    ],
    hdrs = [
        "src/xnnpack/aarch32-assembler.h",
        "src/xnnpack/aarch64-assembler.h",
        "src/xnnpack/assembler.h",
    ],
    aarch32_srcs = JIT_AARCH32_SRCS,
    aarch64_srcs = JIT_AARCH64_SRCS,
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":math",
        ":memory",
        ":microkernels_h",
        ":microparams",
        ":post_operation",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "jit_test_mode",
    srcs = [
        "src/jit/aarch32-assembler.cc",
        "src/jit/aarch64-assembler.cc",
        "src/jit/assembler.cc",
    ],
    hdrs = [
        "src/xnnpack/aarch32-assembler.h",
        "src/xnnpack/aarch64-assembler.h",
        "src/xnnpack/assembler.h",
    ],
    aarch32_srcs = JIT_AARCH32_SRCS,
    aarch64_srcs = JIT_AARCH64_SRCS,
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":math",
        ":memory",
        ":microkernels_h",
        ":microparams",
        ":post_operation",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "subgraph",
    srcs = SUBGRAPH_SRCS,
    hdrs = [
        "src/xnnpack/memory-planner.h",
        "src/xnnpack/subgraph.h",
        "src/xnnpack/subgraph-validation.h",
    ],
    defines = select({
        ":xnn_enable_memopt_explicit_true": ["XNN_ENABLE_MEMOPT=1"],
        ":xnn_enable_memopt_explicit_false": ["XNN_ENABLE_MEMOPT=0"],
        "//conditions:default": ["XNN_ENABLE_MEMOPT=1"],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":allocator",
        ":cache",
        ":common",
        ":enable_jit",
        ":enable_sparse",
        ":logging",
        ":math",
        ":node_type",
        ":operators",
        ":params",
        ":requantization",
        ":xnnpack_h",
        "@FP16",
    ],
)

xnnpack_cc_library(
    name = "subgraph_test_mode",
    srcs = SUBGRAPH_SRCS,
    hdrs = [
        "src/xnnpack/memory-planner.h",
        "src/xnnpack/subgraph.h",
        "src/xnnpack/subgraph-validation.h",
    ],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    defines = select({
        ":xnn_enable_memopt_explicit_true": ["XNN_ENABLE_MEMOPT=1"],
        ":xnn_enable_memopt_explicit_false": ["XNN_ENABLE_MEMOPT=0"],
        "//conditions:default": ["XNN_ENABLE_MEMOPT=1"],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":allocator",
        ":cache",
        ":common",
        ":enable_jit",
        ":enable_sparse",
        ":logging",
        ":math",
        ":node_type",
        ":operators",
        ":params",
        ":requantization",
        ":xnnpack_h",
        "@FP16",
    ],
)

xnnpack_cc_library(
    name = "mutex",
    srcs = [
        "src/mutex.c",
    ],
    hdrs = [
        "src/xnnpack/mutex.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "mutex_test_mode",
    srcs = [
        "src/mutex.c",
    ],
    hdrs = [
        "src/xnnpack/mutex.h",
    ],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":logging",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "normalization",
    srcs = ["src/normalization.c"],
    hdrs = [
        "src/xnnpack/normalization.h",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":common",
        ":math",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "normalization_test_mode",
    srcs = ["src/normalization.c"],
    hdrs = ["src/xnnpack/normalization.h"],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ],
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    deps = [
        ":math",
        ":xnnpack_h",
    ],
)

xnnpack_cc_library(
    name = "XNNPACK",
    srcs = [
        "src/init.c",
    ],
    hdrs = ["include/xnnpack.h"],
    copts = select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    visibility = xnnpack_visibility(),
    deps = [
        ":allocator",
        ":common",
        ":hardware_config",
        ":logging",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":microparams_init",
        ":normalization",
        ":operators",
        ":params",
        ":prod_microkernels",
        ":subgraph",
    ] + select({
        ":emscripten": [],
        "//conditions:default": ["@cpuinfo"],
    }),
)

xnnpack_cc_library(
    name = "XNNPACK_test_mode",
    srcs = [
        "src/init.c",
    ],
    hdrs = ["include/xnnpack.h"],
    copts = [
        "-UNDEBUG",
        "-DXNN_TEST_MODE=1",
    ] + select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    visibility = xnnpack_visibility(),
    deps = [
        ":allocator",
        ":common",
        ":hardware_config_test_mode",
        ":logging",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":microparams_init",
        ":operators_test_mode",
        ":params",
        ":subgraph_test_mode",
        ":test_microkernels",
    ] + select({
        ":emscripten": [],
        "//conditions:default": ["@cpuinfo"],
    }),
)

# Specialized XNNPACK version for TensorFlow Lite. Excludes operators currently
# not used by the TensorFlow Lite XNNPACK delegate to minimize code size.
xnnpack_cc_library(
    name = "xnnpack_for_tflite",
    srcs = [
        "src/init.c",
    ],
    hdrs = ["include/xnnpack.h"],
    copts = select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    visibility = xnnpack_visibility(),
    deps = [
        ":allocator",
        ":amalgam_microkernels",
        ":common",
        ":logging",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":microparams_init",
        ":operators",
        ":params",
        ":subgraph",
    ] + select({
        ":emscripten": [],
        "//conditions:default": [
            "@cpuinfo",
            "@pthreadpool",
        ],
    }),
)

# Specialized XNNPACK version for TensorFlow.js. Excludes operators currently
# not used by the TensorFlow.js WebAssembly backend to minimize code size.
xnnpack_cc_library(
    name = "xnnpack_for_tfjs",
    srcs = [
        "src/init.c",
    ],
    hdrs = ["include/xnnpack.h"],
    copts = select({
        ":debug_build": [],
        "//conditions:default": xnnpack_min_size_copts(),
    }) + select({
        ":xnn_enable_hmp_explicit_false": ["-DXNN_MAX_UARCH_TYPES=1"],
        "//conditions:default": [],
    }),
    gcc_copts = xnnpack_gcc_std_copts(),
    msvc_copts = xnnpack_msvc_std_copts(),
    visibility = xnnpack_visibility(),
    deps = [
        ":allocator",
        ":common",
        ":logging",
        ":math",
        ":microkernels_h",
        ":microparams",
        ":microparams_init",
        ":operators",
        ":params",
        ":prod_microkernels",
    ] + select({
        ":emscripten": [],
        "//conditions:default": ["@cpuinfo"],
    }),
)

xnnpack_cc_library(
    name = "bench_utils",
    srcs = ["bench/utils.cc"],
    hdrs = ["bench/utils.h"],
    deps = [
        ":XNNPACK",
        ":allocator",
        ":common",
        ":params",
        "@com_google_benchmark//:benchmark",
        "@cpuinfo",
    ],
)

######################### Benchmarks for micro-kernels #########################

xnnpack_benchmark(
    name = "qs8_dwconv_bench",
    srcs = [
        "bench/dwconv.h",
        "bench/qs8-dwconv.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":microkernel_utils",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "qs8_f32_vcvt_bench",
    srcs = [
        "bench/qs8-f32-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs8_gemm_bench",
    srcs = [
        "bench/gemm.h",
        "bench/qs8-gemm.cc",
    ],
    copts = xnnpack_optional_ruy_copts() + xnnpack_optional_gemmlowp_copts(),
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":enable_jit",
        ":math",
    ] + xnnpack_optional_ruy_deps() + xnnpack_optional_gemmlowp_deps(),
)

xnnpack_benchmark(
    name = "qs8_requantization_bench",
    srcs = [
        "bench/qs8-requantization.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [":requantization_stubs"],
)

xnnpack_benchmark(
    name = "qs8_vadd_bench",
    srcs = [
        "bench/qs8-vadd.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs8_vaddc_bench",
    srcs = [
        "bench/qs8-vaddc.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs8_vcvt_bench",
    srcs = [
        "bench/qs8-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs16_qs8_vcvt_bench",
    srcs = [
        "bench/qs16-qs8-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs8_vlrelu_bench",
    srcs = [
        "bench/qs8-vlrelu.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs8_vmul_bench",
    srcs = [
        "bench/qs8-vmul.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qs8_vmulc_bench",
    srcs = [
        "bench/qs8-vmulc.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_f32_vcvt_bench",
    srcs = [
        "bench/qu8-f32-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_gemm_bench",
    srcs = [
        "bench/gemm.h",
        "bench/qu8-gemm.cc",
    ],
    copts = xnnpack_optional_ruy_copts() + xnnpack_optional_gemmlowp_copts(),
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":math",
    ] + xnnpack_optional_ruy_deps() + xnnpack_optional_gemmlowp_deps(),
)

xnnpack_benchmark(
    name = "qu8_requantization_bench",
    srcs = [
        "bench/qu8-requantization.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [":requantization_stubs"],
)

xnnpack_benchmark(
    name = "qu8_vadd_bench",
    srcs = [
        "bench/qu8-vadd.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_vaddc_bench",
    srcs = [
        "bench/qu8-vaddc.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_vcvt_bench",
    srcs = [
        "bench/qu8-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_vlrelu_bench",
    srcs = [
        "bench/qu8-vlrelu.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_vmul_bench",
    srcs = [
        "bench/qu8-vmul.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "qu8_vmulc_bench",
    srcs = [
        "bench/qu8-vmulc.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "bf16_gemm_bench",
    srcs = [
        "bench/bf16-gemm.cc",
        "bench/gemm.h",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":math",
    ],
)

xnnpack_benchmark(
    name = "f16_f32acc_igemm_bench",
    srcs = [
        "bench/conv.h",
        "bench/f16-f32acc-igemm.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f16_igemm_bench",
    srcs = [
        "bench/conv.h",
        "bench/f16-igemm.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f16_f32acc_gemm_bench",
    srcs = [
        "bench/f16-f32acc-gemm.cc",
        "bench/gemm.h",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":math",
    ],
)

xnnpack_benchmark(
    name = "f16_gemm_bench",
    srcs = [
        "bench/f16-gemm.cc",
        "bench/gemm.h",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":math",
    ],
)

xnnpack_benchmark(
    name = "f16_raddstoreexpminusmax_bench",
    srcs = [
        "bench/f16-raddstoreexpminusmax.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f16_spmm_bench",
    srcs = [
        "bench/f16-spmm.cc",
        "bench/spmm.h",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f16_vsigmoid_bench",
    srcs = [
        "bench/f16-vsigmoid.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f16_vtanh_bench",
    srcs = [
        "bench/f16-vtanh.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f16_f32_vcvt_bench",
    srcs = [
        "bench/f16-f32-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_igemm_bench",
    srcs = [
        "bench/conv.h",
        "bench/f32-igemm.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f32_conv_hwc_bench",
    srcs = [
        "bench/dconv.h",
        "bench/f32-conv-hwc.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
    ],
)

xnnpack_benchmark(
    name = "f16_conv_hwc2chw_bench",
    srcs = [
        "bench/dconv.h",
        "bench/f16-conv-hwc2chw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
    ],
)

xnnpack_benchmark(
    name = "f16_gavgpool_cw_bench",
    srcs = [
        "bench/f16-gavgpool-cw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_gavgpool_cw_bench",
    srcs = [
        "bench/f32-gavgpool-cw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_conv_hwc2chw_bench",
    srcs = [
        "bench/dconv.h",
        "bench/f32-conv-hwc2chw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
    ],
)

xnnpack_benchmark(
    name = "f16_dwconv_bench",
    srcs = [
        "bench/dwconv.h",
        "bench/f16-dwconv.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":microkernel_utils",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f32_dwconv_bench",
    srcs = [
        "bench/dwconv.h",
        "bench/f32-dwconv.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":microkernel_utils",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f32_dwconv2d_chw_bench",
    srcs = [
        "bench/dwconv.h",
        "bench/f32-dwconv2d-chw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f16_dwconv2d_chw_bench",
    srcs = [
        "bench/dwconv.h",
        "bench/f16-dwconv2d-chw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":indirection",
        ":operators",
    ],
)

xnnpack_benchmark(
    name = "f32_f16_vcvt_bench",
    srcs = [
        "bench/f32-f16-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "xx_transpose_bench",
    srcs = [
        "bench/xx-transpose.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x8_transpose_bench",
    srcs = [
        "bench/x8-transpose.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x16_transpose_bench",
    srcs = [
        "bench/x16-transpose.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x24_transpose_bench",
    srcs = [
        "bench/x24-transpose.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x32_transpose_bench",
    srcs = [
        "bench/x32-transpose.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x64_transpose_bench",
    srcs = [
        "bench/x64-transpose.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_bgemm_bench",
    srcs = [
        "bench/bgemm.h",
        "bench/f32-bgemm.cc",
    ],
    copts = xnnpack_optional_ruy_copts(),
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":allocator",
        ":math",
    ] + xnnpack_optional_ruy_deps(),
)

xnnpack_benchmark(
    name = "f32_gemm_bench",
    srcs = [
        "bench/f32-gemm.cc",
        "bench/gemm.h",
    ],
    copts = xnnpack_optional_ruy_copts(),
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":allocator",
        ":math",
    ] + xnnpack_optional_ruy_deps(),
)

xnnpack_benchmark(
    name = "f32_qs8_vcvt_bench",
    srcs = [
        "bench/f32-qs8-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_qu8_vcvt_bench",
    srcs = [
        "bench/f32-qu8-vcvt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_raddexpminusmax_bench",
    srcs = [
        "bench/f32-raddexpminusmax.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_raddextexp_bench",
    srcs = [
        "bench/f32-raddextexp.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_raddstoreexpminusmax_bench",
    srcs = [
        "bench/f32-raddstoreexpminusmax.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_rmax_bench",
    srcs = [
        "bench/f32-rmax.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_spmm_bench",
    srcs = [
        "bench/f32-spmm.cc",
        "bench/spmm.h",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_softmax_bench",
    srcs = [
        "bench/f32-softmax.cc",
    ],
    copts = xnnpack_optional_dnnl_copts(),
    deps = MICROKERNEL_BENCHMARK_DEPS + xnnpack_optional_dnnl_deps(),
)

xnnpack_benchmark(
    name = "f16_velu_bench",
    srcs = [
        "bench/f16-velu.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_velu_bench",
    srcs = [
        "bench/f32-velu.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vhswish_bench",
    srcs = [
        "bench/f32-vhswish.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vlrelu_bench",
    srcs = [
        "bench/f32-vlrelu.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vrelu_bench",
    srcs = [
        "bench/f32-vrelu.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vscaleexpminusmax_bench",
    srcs = [
        "bench/f32-vscaleexpminusmax.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vscaleextexp_bench",
    srcs = [
        "bench/f32-vscaleextexp.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vsigmoid_bench",
    srcs = [
        "bench/f32-vsigmoid.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f16_vsqrt_bench",
    srcs = [
        "bench/f16-vsqrt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vsqrt_bench",
    srcs = [
        "bench/f32-vsqrt.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_vtanh_bench",
    srcs = [
        "bench/f32-vtanh.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "f32_im2col_gemm_bench",
    srcs = [
        "bench/conv.h",
        "bench/f32-im2col-gemm.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":im2col",
        ":math",
    ],
)

xnnpack_benchmark(
    name = "rounding_bench",
    srcs = [
        "bench/rounding.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "s16_rmaxabs_bench",
    srcs = [
        "bench/s16-rmaxabs.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "s16_window_bench",
    srcs = [
        "bench/s16-window.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "u32_filterbank_accumulate_bench",
    srcs = [
        "bench/u32-filterbank-accumulate.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "u32_filterbank_subtract_bench",
    srcs = [
        "bench/u32-filterbank-subtract.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "u32_vlog_bench",
    srcs = [
        "bench/u32-vlog.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "u64_u32_vsqrtshift_bench",
    srcs = [
        "bench/u64-u32-vsqrtshift.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "i16_vlshift_bench",
    srcs = [
        "bench/i16-vlshift.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "cs16_vsquareabs_bench",
    srcs = [
        "bench/cs16-vsquareabs.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "cs16_bfly4_bench",
    srcs = [
        "bench/cs16-bfly4.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "cs16_fftr_bench",
    srcs = [
        "bench/cs16-fftr.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x8_lut_bench",
    srcs = [
        "bench/x8-lut.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "x32_packw_bench",
    srcs = [
        "bench/bgemm.h",
        "bench/x32-packw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":allocator",
        ":math",
    ],
)

xnnpack_benchmark(
    name = "x16_packw_bench",
    srcs = [
        "bench/bgemm.h",
        "bench/x16-packw.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":allocator",
        ":math",
    ],
)

########################### Benchmarks for operators ###########################

xnnpack_benchmark(
    name = "abs_bench",
    srcs = ["bench/abs.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "average_pooling_bench",
    srcs = ["bench/average-pooling.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "bankers_rounding_bench",
    srcs = ["bench/bankers-rounding.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "ceiling_bench",
    srcs = ["bench/ceiling.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "channel_shuffle_bench",
    srcs = ["bench/channel-shuffle.cc"],
    deps = OPERATOR_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "convert_bench",
    srcs = [
        "bench/convert.cc",
    ],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "convolution_bench",
    srcs = ["bench/convolution.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "deconvolution_bench",
    srcs = ["bench/deconvolution.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "elu_bench",
    srcs = ["bench/elu.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "floor_bench",
    srcs = ["bench/floor.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "global_average_pooling_bench",
    srcs = ["bench/global-average-pooling.cc"],
    deps = OPERATOR_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "hardswish_bench",
    srcs = ["bench/hardswish.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "leaky_relu_bench",
    srcs = ["bench/leaky-relu.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "max_pooling_bench",
    srcs = ["bench/max-pooling.cc"],
    deps = OPERATOR_BENCHMARK_DEPS,
)

xnnpack_benchmark(
    name = "negate_bench",
    srcs = ["bench/negate.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "prelu_bench",
    srcs = ["bench/prelu.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "sigmoid_bench",
    srcs = ["bench/sigmoid.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "softmax_bench",
    srcs = ["bench/softmax.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "square_bench",
    srcs = ["bench/square.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "square_root_bench",
    srcs = ["bench/square-root.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "tanh_bench",
    srcs = ["bench/tanh.cc"],
    copts = xnnpack_optional_tflite_copts(),
    tags = ["nowin32"],
    deps = OPERATOR_BENCHMARK_DEPS + xnnpack_optional_tflite_deps(),
)

xnnpack_benchmark(
    name = "truncation_bench",
    srcs = ["bench/truncation.cc"],
    deps = OPERATOR_BENCHMARK_DEPS,
)

############################# End-to-end benchmarks ############################

xnnpack_cc_library(
    name = "fp16_mobilenet_v1",
    srcs = ["models/fp16-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@FP16",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_mobilenet_v1",
    srcs = ["models/fp32-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_sparse_mobilenet_v1",
    srcs = ["models/fp16-sparse-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_sparse_mobilenet_v1",
    srcs = ["models/fp32-sparse-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "qc8_mobilenet_v1",
    srcs = ["models/qc8-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "qc8_mobilenet_v2",
    srcs = ["models/qc8-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "qs8_mobilenet_v1",
    srcs = ["models/qs8-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "qs8_mobilenet_v2",
    srcs = ["models/qs8-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "qu8_mobilenet_v1",
    srcs = ["models/qu8-mobilenet-v1.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "qu8_mobilenet_v2",
    srcs = ["models/qu8-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_mobilenet_v2",
    srcs = ["models/fp16-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@FP16",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_mobilenet_v2",
    srcs = ["models/fp32-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_sparse_mobilenet_v2",
    srcs = ["models/fp16-sparse-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_sparse_mobilenet_v2",
    srcs = ["models/fp32-sparse-mobilenet-v2.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_mobilenet_v3_large",
    srcs = ["models/fp16-mobilenet-v3-large.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@FP16",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_mobilenet_v3_large",
    srcs = ["models/fp32-mobilenet-v3-large.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_sparse_mobilenet_v3_large",
    srcs = ["models/fp16-sparse-mobilenet-v3-large.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_sparse_mobilenet_v3_large",
    srcs = ["models/fp32-sparse-mobilenet-v3-large.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_mobilenet_v3_small",
    srcs = ["models/fp16-mobilenet-v3-small.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@FP16",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_mobilenet_v3_small",
    srcs = ["models/fp32-mobilenet-v3-small.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_mobilenet_v3_small_fused",
    srcs = ["models/fp32-mobilenet-v3-small-fused.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        ":post_operation",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp16_sparse_mobilenet_v3_small",
    srcs = ["models/fp16-sparse-mobilenet-v3-small.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_cc_library(
    name = "fp32_sparse_mobilenet_v3_small",
    srcs = ["models/fp32-sparse-mobilenet-v3-small.cc"],
    hdrs = ["models/models.h"],
    copts = xnnpack_std_cxxopts(),
    deps = [
        ":XNNPACK",
        ":cache",
        "@pthreadpool",
    ],
)

xnnpack_benchmark(
    name = "f16_dwconv_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/f16-dwconv-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":fp16_mobilenet_v1",
        ":fp16_mobilenet_v2",
        ":fp16_mobilenet_v3_large",
        ":fp16_mobilenet_v3_small",
    ],
)

xnnpack_benchmark(
    name = "f16_gemm_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/f16-gemm-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":fp16_mobilenet_v1",
        ":fp16_mobilenet_v2",
        ":fp16_mobilenet_v3_large",
        ":fp16_mobilenet_v3_small",
    ],
)

xnnpack_benchmark(
    name = "f32_dwconv_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/f32-dwconv-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":fp32_mobilenet_v1",
        ":fp32_mobilenet_v2",
        ":fp32_mobilenet_v3_large",
        ":fp32_mobilenet_v3_small",
    ],
)

xnnpack_benchmark(
    name = "f32_gemm_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/f32-gemm-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":fp32_mobilenet_v1",
        ":fp32_mobilenet_v2",
        ":fp32_mobilenet_v3_large",
        ":fp32_mobilenet_v3_small",
    ],
)

xnnpack_benchmark(
    name = "qs8_dwconv_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/qs8-dwconv-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":qs8_mobilenet_v1",
        ":qs8_mobilenet_v2",
    ],
)

xnnpack_benchmark(
    name = "qs8_gemm_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/qs8-gemm-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":qs8_mobilenet_v1",
        ":qs8_mobilenet_v2",
    ],
)

xnnpack_benchmark(
    name = "qu8_gemm_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/qu8-gemm-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":qu8_mobilenet_v1",
        ":qu8_mobilenet_v2",
    ],
)

xnnpack_benchmark(
    name = "qu8_dwconv_e2e_bench",
    srcs = [
        "bench/end2end.h",
        "bench/qu8-dwconv-e2e.cc",
    ],
    deps = MICROKERNEL_BENCHMARK_DEPS + [
        ":XNNPACK",
        ":qu8_mobilenet_v1",
        ":qu8_mobilenet_v2",
    ],
)

xnnpack_benchmark(
    name = "end2end_bench",
    srcs = ["bench/end2end.cc"],
    deps = [
        ":XNNPACK",
        ":bench_utils",
        ":fp16_mobilenet_v1",
        ":fp16_mobilenet_v2",
        ":fp16_mobilenet_v3_large",
        ":fp16_mobilenet_v3_small",
        ":fp16_sparse_mobilenet_v1",
        ":fp16_sparse_mobilenet_v2",
        ":fp16_sparse_mobilenet_v3_large",
        ":fp16_sparse_mobilenet_v3_small",
        ":fp32_mobilenet_v1",
        ":fp32_mobilenet_v2",
        ":fp32_mobilenet_v3_large",
        ":fp32_mobilenet_v3_small",
        ":fp32_mobilenet_v3_small_fused",
        ":fp32_sparse_mobilenet_v1",
        ":fp32_sparse_mobilenet_v2",
        ":fp32_sparse_mobilenet_v3_large",
        ":fp32_sparse_mobilenet_v3_small",
        ":qc8_mobilenet_v1",
        ":qc8_mobilenet_v2",
        ":qs8_mobilenet_v1",
        ":qs8_mobilenet_v2",
        ":qu8_mobilenet_v1",
        ":qu8_mobilenet_v2",
        "@pthreadpool",
    ],
)

#################### Accuracy evaluation for math functions ####################

xnnpack_benchmark(
    name = "f16_exp_ulp_eval",
    srcs = [
        "eval/f16-exp-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f16_expminus_ulp_eval",
    srcs = [
        "eval/f16-expminus-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f16_expm1minus_ulp_eval",
    srcs = [
        "eval/f16-expm1minus-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f16_sigmoid_ulp_eval",
    srcs = [
        "eval/f16-sigmoid-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f16_sqrt_ulp_eval",
    srcs = [
        "eval/f16-sqrt-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f16_tanh_ulp_eval",
    srcs = [
        "eval/f16-tanh-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_exp_ulp_eval",
    srcs = [
        "eval/f32-exp-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_expminus_ulp_eval",
    srcs = [
        "eval/f32-expminus-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_expm1minus_ulp_eval",
    srcs = [
        "eval/f32-expm1minus-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_extexp_ulp_eval",
    srcs = [
        "eval/f32-extexp-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_sigmoid_ulp_eval",
    srcs = [
        "eval/f32-sigmoid-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_sqrt_ulp_eval",
    srcs = [
        "eval/f32-sqrt-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_benchmark(
    name = "f32_tanh_ulp_eval",
    srcs = [
        "eval/f32-tanh-ulp.cc",
    ],
    deps = ACCURACY_EVAL_DEPS,
)

################### Accuracy verification for math functions ##################

xnnpack_cc_library(
    name = "math_evaluation_tester",
    testonly = True,
    srcs = ["eval/math-evaluation-tester.cc"],
    hdrs = ["eval/math-evaluation-tester.h"],
    deps = [
        ":aligned_allocator",
        ":common",
        ":math",
        ":math_stubs",
        "@FP16",
        "@pthreadpool",
        "@com_google_googletest//:gtest_main",
    ],
)

xnnpack_unit_test(
    name = "f16_sqrt_eval",
    srcs = [
        "eval/f16-sqrt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f16_tanh_eval",
    srcs = [
        "eval/f16-tanh.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS + [
        ":math_evaluation_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_f32_cvt_eval",
    srcs = [
        "eval/f16-f32-cvt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_f16_cvt_eval",
    srcs = [
        "eval/f32-f16-cvt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_qs8_cvt_eval",
    srcs = [
        "eval/f32-qs8-cvt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_qu8_cvt_eval",
    srcs = [
        "eval/f32-qu8-cvt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_exp_eval",
    srcs = [
        "eval/f32-exp.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS + [
        ":math_evaluation_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_expm1minus_eval",
    srcs = [
        "eval/f32-expm1minus.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS + [
        ":math_evaluation_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_expminus_eval",
    srcs = [
        "eval/f32-expminus.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS + [
        ":math_evaluation_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_roundne_eval",
    srcs = [
        "eval/f32-roundne.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_roundd_eval",
    srcs = [
        "eval/f32-roundd.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_roundu_eval",
    srcs = [
        "eval/f32-roundu.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_roundz_eval",
    srcs = [
        "eval/f32-roundz.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "f32_tanh_eval",
    srcs = [
        "eval/f32-tanh.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS + [
        ":math_evaluation_tester",
    ],
)

xnnpack_unit_test(
    name = "u32_sqrt_eval",
    srcs = [
        "eval/u32-sqrt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

xnnpack_unit_test(
    name = "u64_sqrt_eval",
    srcs = [
        "eval/u64-sqrt.cc",
    ],
    automatic = False,
    deps = ACCURACY_EVAL_DEPS,
)

######################### Unit tests for micro-kernels #########################

xnnpack_cc_library(
    name = "gemm_microkernel_tester",
    testonly = True,
    srcs = ["test/gemm-microkernel-tester.cc"],
    hdrs = ["test/gemm-microkernel-tester.h"],
    deps = MICROKERNEL_TEST_DEPS + [
        ":XNNPACK_test_mode",
        ":packing",
        "@com_google_googletest//:gtest_main",
    ],
)

xnnpack_unit_test(
    name = "bf16_gemm_minmax_test",
    srcs = [
        "test/bf16-gemm-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_f32_vcvt_test",
    srcs = [
        "test/f16-f32-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_avgpool_minmax_test",
    srcs = [
        "test/avgpool-microkernel-tester.h",
        "test/f16-avgpool-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_dwconv_minmax_multipass_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/f16-dwconv-minmax-multipass.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "f16_dwconv_minmax_unipass_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/f16-dwconv-minmax-unipass.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "f16_gavgpool_cw_test",
    srcs = [
        "test/f16-gavgpool-cw.cc",
        "test/gavgpool-cw-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_gavgpool_minmax_test",
    srcs = [
        "test/f16-gavgpool-minmax.cc",
        "test/gavgpool-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_f32acc_gemm_minmax_test",
    srcs = [
        "test/f16-f32acc-gemm-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_gemm_jit_test",
    srcs = [
        "test/f16-gemm-jit.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_gemm_minmax_test",
    srcs = [
        "test/f16-gemm-minmax.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_ibilinear_test",
    srcs = [
        "test/f16-ibilinear.cc",
        "test/ibilinear-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_ibilinear_chw_test",
    srcs = [
        "test/f16-ibilinear-chw.cc",
        "test/ibilinear-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_igemm_jit_test",
    srcs = [
        "test/f16-igemm-jit.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_f32acc_igemm_minmax_test",
    srcs = [
        "test/f16-f32acc-igemm-minmax.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_igemm_minmax_test",
    srcs = [
        "test/f16-igemm-minmax.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f16_maxpool_minmax_test",
    srcs = [
        "test/f16-maxpool-minmax.cc",
        "test/maxpool-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_pavgpool_minmax_test",
    srcs = [
        "test/avgpool-microkernel-tester.h",
        "test/f16-pavgpool-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_prelu_test",
    srcs = [
        "test/f16-prelu.cc",
        "test/prelu-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_spmm_minmax_test",
    srcs = [
        "test/f16-spmm-minmax.cc",
        "test/spmm-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vabs_test",
    srcs = [
        "test/f16-vabs.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vadd_minmax_test",
    srcs = [
        "test/f16-vadd-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vaddc_minmax_test",
    srcs = [
        "test/f16-vaddc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vclamp_test",
    srcs = [
        "test/f16-vclamp.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vdiv_minmax_test",
    srcs = [
        "test/f16-vdiv-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vdivc_minmax_test",
    srcs = [
        "test/f16-vdivc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vrdivc_minmax_test",
    srcs = [
        "test/f16-vrdivc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_velu_test",
    srcs = [
        "test/f16-velu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vhswish_test",
    srcs = [
        "test/f16-vhswish.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vlrelu_test",
    srcs = [
        "test/f16-vlrelu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vmax_test",
    srcs = [
        "test/f16-vmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vmaxc_test",
    srcs = [
        "test/f16-vmaxc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vmin_test",
    srcs = [
        "test/f16-vmin.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vminc_test",
    srcs = [
        "test/f16-vminc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vmul_minmax_test",
    srcs = [
        "test/f16-vmul-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vmulc_minmax_test",
    srcs = [
        "test/f16-vmulc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vmulcaddc_minmax_test",
    srcs = [
        "test/f16-vmulcaddc-minmax.cc",
        "test/vmulcaddc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f16_vneg_test",
    srcs = [
        "test/f16-vneg.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vrndne_test",
    srcs = [
        "test/f16-vrndne.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vrndz_test",
    srcs = [
        "test/f16-vrndz.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vrndu_test",
    srcs = [
        "test/f16-vrndu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vrndd_test",
    srcs = [
        "test/f16-vrndd.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vsqrt_test",
    srcs = [
        "test/f16-vsqrt.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_raddstoreexpminusmax_test",
    srcs = [
        "test/f16-raddstoreexpminusmax.cc",
        "test/raddstoreexpminusmax-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_rmax_test",
    srcs = [
        "test/f16-rmax.cc",
        "test/rmax-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vsigmoid_test",
    srcs = [
        "test/f16-vsigmoid.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vsqr_test",
    srcs = [
        "test/f16-vsqr.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vsub_minmax_test",
    srcs = [
        "test/f16-vsub-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vsubc_minmax_test",
    srcs = [
        "test/f16-vsubc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vrsubc_minmax_test",
    srcs = [
        "test/f16-vrsubc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f16_vtanh_test",
    srcs = [
        "test/f16-vtanh.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_argmaxpool_test",
    srcs = [
        "test/argmaxpool-microkernel-tester.h",
        "test/f32-argmaxpool.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_avgpool_minmax_test",
    srcs = [
        "test/avgpool-microkernel-tester.h",
        "test/f32-avgpool-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_ibilinear_test",
    srcs = [
        "test/f32-ibilinear.cc",
        "test/ibilinear-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_ibilinear_chw_test",
    srcs = [
        "test/f32-ibilinear-chw.cc",
        "test/ibilinear-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_igemm_test",
    srcs = [
        "test/f32-igemm.cc",
        "test/f32-igemm-2.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_igemm_relu_test",
    srcs = [
        "test/f32-igemm-relu.cc",
        "test/f32-igemm-relu-2.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_igemm_minmax_test",
    srcs = [
        "test/f32-igemm-minmax.cc",
        "test/f32-igemm-minmax-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_igemm_jit_test",
    srcs = [
        "test/f32-igemm-jit.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
        ":jit_test_mode",
    ],
)

xnnpack_unit_test(
    name = "f32_conv_hwc_test",
    srcs = [
        "test/conv-hwc-microkernel-tester.h",
        "test/f32-conv-hwc.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f16_conv_hwc2chw_test",
    srcs = [
        "test/conv-hwc2chw-microkernel-tester.h",
        "test/f16-conv-hwc2chw.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f32_conv_hwc2chw_test",
    srcs = [
        "test/conv-hwc2chw-microkernel-tester.h",
        "test/f32-conv-hwc2chw.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f32_dwconv_unipass_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/f32-dwconv-unipass.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "f32_dwconv_multipass_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/f32-dwconv-multipass.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "f32_dwconv_minmax_multipass_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/f32-dwconv-minmax-multipass.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "f32_dwconv_minmax_unipass_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/f32-dwconv-minmax-unipass.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "f16_dwconv2d_chw_test",
    srcs = [
        "test/dwconv2d-microkernel-tester.h",
        "test/f16-dwconv2d-chw.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f32_dwconv2d_chw_test",
    srcs = [
        "test/dwconv2d-microkernel-tester.h",
        "test/f32-dwconv2d-chw.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f32_f16_vcvt_test",
    srcs = [
        "test/f32-f16-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_gavgpool_minmax_test",
    srcs = [
        "test/f32-gavgpool-minmax.cc",
        "test/gavgpool-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_gavgpool_cw_test",
    srcs = [
        "test/f32-gavgpool-cw.cc",
        "test/gavgpool-cw-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_gemm_test",
    srcs = [
        "test/f32-gemm.cc",
        "test/f32-gemm-2.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_gemm_relu_test",
    srcs = [
        "test/f32-gemm-relu.cc",
        "test/f32-gemm-relu-2.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_gemm_minmax_test",
    srcs = [
        "test/f32-gemm-minmax.cc",
        "test/f32-gemm-minmax-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_gemm_jit_test",
    srcs = [
        "test/f32-gemm-jit.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
        ":jit_test_mode",
    ],
)

xnnpack_unit_test(
    name = "f32_gemminc_minmax_test",
    srcs = [
        "test/f32-gemm-minmax-2.cc",
        "test/f32-gemminc-minmax.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_vhswish_test",
    srcs = [
        "test/f32-vhswish.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_maxpool_minmax_test",
    srcs = [
        "test/f32-maxpool-minmax.cc",
        "test/maxpool-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_pavgpool_minmax_test",
    srcs = [
        "test/avgpool-microkernel-tester.h",
        "test/f32-pavgpool-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_ppmm_minmax_test",
    srcs = [
        "test/f32-ppmm-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "f32_prelu_test",
    srcs = [
        "test/f32-prelu.cc",
        "test/prelu-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_qs8_vcvt_test",
    srcs = [
        "test/f32-qs8-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_qu8_vcvt_test",
    srcs = [
        "test/f32-qu8-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_raddexpminusmax_test",
    srcs = [
        "test/f32-raddexpminusmax.cc",
        "test/raddexpminusmax-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_raddextexp_test",
    srcs = [
        "test/f32-raddextexp.cc",
        "test/raddextexp-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_raddstoreexpminusmax_test",
    srcs = [
        "test/f32-raddstoreexpminusmax.cc",
        "test/raddstoreexpminusmax-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_rmax_test",
    srcs = [
        "test/f32-rmax.cc",
        "test/rmax-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_spmm_minmax_test",
    srcs = [
        "test/f32-spmm-minmax.cc",
        "test/spmm-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vabs_test",
    srcs = [
        "test/f32-vabs.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vadd_test",
    srcs = [
        "test/f32-vadd.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vadd_minmax_test",
    srcs = [
        "test/f32-vadd-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vadd_relu_test",
    srcs = [
        "test/f32-vadd-relu.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vaddc_test",
    srcs = [
        "test/f32-vaddc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vaddc_minmax_test",
    srcs = [
        "test/f32-vaddc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vaddc_relu_test",
    srcs = [
        "test/f32-vaddc-relu.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vclamp_test",
    srcs = [
        "test/f32-vclamp.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vdiv_test",
    srcs = [
        "test/f32-vdiv.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vdiv_minmax_test",
    srcs = [
        "test/f32-vdiv-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vdiv_relu_test",
    srcs = [
        "test/f32-vdiv-relu.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vdivc_test",
    srcs = [
        "test/f32-vdivc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vdivc_minmax_test",
    srcs = [
        "test/f32-vdivc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vdivc_relu_test",
    srcs = [
        "test/f32-vdivc-relu.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrdivc_test",
    srcs = [
        "test/f32-vrdivc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrdivc_minmax_test",
    srcs = [
        "test/f32-vrdivc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrdivc_relu_test",
    srcs = [
        "test/f32-vrdivc-relu.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_velu_test",
    srcs = [
        "test/f32-velu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmax_test",
    srcs = [
        "test/f32-vmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmaxc_test",
    srcs = [
        "test/f32-vmaxc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmin_test",
    srcs = [
        "test/f32-vmin.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vminc_test",
    srcs = [
        "test/f32-vminc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmul_test",
    srcs = [
        "test/f32-vmul.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmul_minmax_test",
    srcs = [
        "test/f32-vmul-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmul_relu_test",
    srcs = [
        "test/f32-vmul-relu.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmulc_test",
    srcs = [
        "test/f32-vmulc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmulc_minmax_test",
    srcs = [
        "test/f32-vmulc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmulc_relu_test",
    srcs = [
        "test/f32-vmulc-relu.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vmulcaddc_minmax_test",
    srcs = [
        "test/f32-vmulcaddc-minmax.cc",
        "test/vmulcaddc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":packing"],
)

xnnpack_unit_test(
    name = "f32_vlrelu_test",
    srcs = [
        "test/f32-vlrelu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vneg_test",
    srcs = [
        "test/f32-vneg.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrelu_test",
    srcs = [
        "test/f32-vrelu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrndne_test",
    srcs = [
        "test/f32-vrndne.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrndz_test",
    srcs = [
        "test/f32-vrndz.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrndu_test",
    srcs = [
        "test/f32-vrndu.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrndd_test",
    srcs = [
        "test/f32-vrndd.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vscaleexpminusmax_test",
    srcs = [
        "test/f32-vscaleexpminusmax.cc",
        "test/vscaleexpminusmax-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vscaleextexp_test",
    srcs = [
        "test/f32-vscaleextexp.cc",
        "test/vscaleextexp-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsigmoid_test",
    srcs = [
        "test/f32-vsigmoid.cc",
        "test/vunary-microkernel-tester.h",
    ],
    shard_count = 3,
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsqr_test",
    srcs = [
        "test/f32-vsqr.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsqrdiff_test",
    srcs = [
        "test/f32-vsqrdiff.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsqrdiffc_test",
    srcs = [
        "test/f32-vsqrdiffc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsqrt_test",
    srcs = [
        "test/f32-vsqrt.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsub_test",
    srcs = [
        "test/f32-vsub.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsub_minmax_test",
    srcs = [
        "test/f32-vsub-minmax.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsub_relu_test",
    srcs = [
        "test/f32-vsub-relu.cc",
        "test/vbinary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsubc_test",
    srcs = [
        "test/f32-vsubc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsubc_minmax_test",
    srcs = [
        "test/f32-vsubc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vsubc_relu_test",
    srcs = [
        "test/f32-vsubc-relu.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrsubc_test",
    srcs = [
        "test/f32-vrsubc.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrsubc_minmax_test",
    srcs = [
        "test/f32-vrsubc-minmax.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vrsubc_relu_test",
    srcs = [
        "test/f32-vrsubc-relu.cc",
        "test/vbinaryc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "f32_vtanh_test",
    srcs = [
        "test/f32-vtanh.cc",
        "test/vunary-microkernel-tester.h",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qc8_dwconv_minmax_multipass_fp32_test",
    timeout = "moderate",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qc8-dwconv-minmax-multipass-fp32.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qc8_dwconv_minmax_unipass_fp32_test",
    timeout = "moderate",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qc8-dwconv-minmax-unipass-fp32.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qc8_gemm_jit_fp32_test",
    srcs = [
        "test/qc8-gemm-jit-fp32.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
        ":jit_test_mode",
    ],
)

xnnpack_unit_test(
    name = "qc8_gemm_minmax_fp32_test",
    timeout = "moderate",
    srcs = [
        "test/qc8-gemm-minmax-fp32.cc",
        "test/qc8-gemm-minmax-fp32-2.cc",
        "test/qc8-gemm-minmax-fp32-3.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qc8_igemm_jit_fp32_test",
    srcs = [
        "test/qc8-igemm-jit-fp32.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
        ":jit_test_mode",
    ],
)

xnnpack_unit_test(
    name = "qc8_igemm_minmax_fp32_test",
    timeout = "moderate",
    srcs = [
        "test/qc8-igemm-minmax-fp32.cc",
        "test/qc8-igemm-minmax-fp32-2.cc",
        "test/qc8-igemm-minmax-fp32-3.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qs8_dwconv_minmax_multipass_fp32_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qs8-dwconv-minmax-multipass-fp32.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qs8_dwconv_minmax_multipass_rndnu_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qs8-dwconv-minmax-multipass-rndnu.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qs8_dwconv_minmax_unipass_fp32_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qs8-dwconv-minmax-unipass-fp32.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qs8_dwconv_minmax_unipass_rndnu_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qs8-dwconv-minmax-unipass-rndnu.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qs8_f32_vcvt_test",
    srcs = [
        "test/qs8-f32-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_gavgpool_minmax_fp32_test",
    srcs = [
        "test/gavgpool-microkernel-tester.h",
        "test/qs8-gavgpool-minmax-fp32.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_gavgpool_minmax_rndnu_test",
    srcs = [
        "test/gavgpool-microkernel-tester.h",
        "test/qs8-gavgpool-minmax-rndnu.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_gemm_minmax_fp32_test",
    timeout = "moderate",
    srcs = [
        "test/qs8-gemm-minmax-fp32.cc",
        "test/qs8-gemm-minmax-fp32-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qs8_gemm_jit_rndnu_test",
    srcs = [
        "test/qs8-gemm-jit-rndnu.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
        ":jit_test_mode",
    ],
)

xnnpack_unit_test(
    name = "qs8_gemm_minmax_rndnu_test",
    timeout = "moderate",
    srcs = [
        "test/qs8-gemm-minmax-rndnu.cc",
        "test/qs8-gemm-minmax-rndnu-2.cc",
        "test/qs8-gemm-minmax-rndnu-3.cc",
        "test/qs8-gemm-minmax-rndnu-4.cc",
        "test/qs8-gemm-minmax-rndnu-5.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qs8_igemm_minmax_fp32_test",
    timeout = "moderate",
    srcs = [
        "test/qs8-igemm-minmax-fp32.cc",
        "test/qs8-igemm-minmax-fp32-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qs8_igemm_jit_rndnu_test",
    srcs = [
        "test/qs8-igemm-jit-rndnu.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
        ":jit_test_mode",
    ],
)

xnnpack_unit_test(
    name = "qs8_igemm_minmax_rndnu_test",
    timeout = "moderate",
    srcs = [
        "test/qs8-igemm-minmax-rndnu.cc",
        "test/qs8-igemm-minmax-rndnu-2.cc",
        "test/qs8-igemm-minmax-rndnu-3.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qs8_requantization_test",
    srcs = [
        "test/qs8-requantization.cc",
        "test/requantization-tester.h",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [":requantization_stubs"],
)

xnnpack_unit_test(
    name = "qs8_vadd_minmax_test",
    srcs = [
        "test/qs8-vadd-minmax.cc",
        "test/vadd-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vaddc_minmax_test",
    srcs = [
        "test/qs8-vaddc-minmax.cc",
        "test/vaddc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vcvt_test",
    srcs = [
        "test/qs8-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs16_qs8_vcvt_test",
    srcs = [
        "test/qs16-qs8-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vlrelu_test",
    srcs = [
        "test/qs8-vlrelu.cc",
        "test/vlrelu-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vmul_minmax_fp32_test",
    srcs = [
        "test/qs8-vmul-minmax-fp32.cc",
        "test/vmul-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vmul_minmax_rndnu_test",
    srcs = [
        "test/qs8-vmul-minmax-rndnu.cc",
        "test/vmul-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vmulc_minmax_fp32_test",
    srcs = [
        "test/qs8-vmulc-minmax-fp32.cc",
        "test/vmulc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qs8_vmulc_minmax_rndnu_test",
    srcs = [
        "test/qs8-vmulc-minmax-rndnu.cc",
        "test/vmulc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_avgpool_minmax_fp32_test",
    srcs = [
        "test/avgpool-microkernel-tester.h",
        "test/qu8-avgpool-minmax-fp32.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_dwconv_minmax_multipass_fp32_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qu8-dwconv-minmax-multipass-fp32.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qu8_dwconv_minmax_multipass_rndnu_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qu8-dwconv-minmax-multipass-rndnu.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qu8_dwconv_minmax_unipass_fp32_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qu8-dwconv-minmax-unipass-fp32.cc",
    ],
    shard_count = 5,
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qu8_dwconv_minmax_unipass_rndnu_test",
    srcs = [
        "test/dwconv-microkernel-tester.h",
        "test/qu8-dwconv-minmax-unipass-rndnu.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "qu8_f32_vcvt_test",
    srcs = [
        "test/qu8-f32-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_gavgpool_minmax_fp32_test",
    srcs = [
        "test/gavgpool-microkernel-tester.h",
        "test/qu8-gavgpool-minmax-fp32.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_gavgpool_minmax_rndnu_test",
    srcs = [
        "test/gavgpool-microkernel-tester.h",
        "test/qu8-gavgpool-minmax-rndnu.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_gemm_minmax_fp32_test",
    srcs = [
        "test/qu8-gemm-minmax-fp32.cc",
        "test/qu8-gemm-minmax-fp32-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qu8_gemm_minmax_rndnu_test",
    srcs = [
        "test/qu8-gemm-minmax-rndnu.cc",
        "test/qu8-gemm-minmax-rndnu-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qu8_igemm_minmax_fp32_test",
    srcs = [
        "test/qu8-igemm-minmax-fp32.cc",
        "test/qu8-igemm-minmax-fp32-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qu8_igemm_minmax_rndnu_test",
    srcs = [
        "test/qu8-igemm-minmax-rndnu.cc",
        "test/qu8-igemm-minmax-rndnu-2.cc",
    ],
    shard_count = 10,
    deps = MICROKERNEL_TEST_DEPS + [
        ":gemm_microkernel_tester",
    ],
)

xnnpack_unit_test(
    name = "qu8_requantization_test",
    srcs = [
        "test/qu8-requantization.cc",
        "test/requantization-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS + [":requantization_stubs"],
)

xnnpack_unit_test(
    name = "qu8_vadd_minmax_test",
    srcs = [
        "test/qu8-vadd-minmax.cc",
        "test/vadd-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vaddc_minmax_test",
    srcs = [
        "test/qu8-vaddc-minmax.cc",
        "test/vaddc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vcvt_test",
    srcs = [
        "test/qu8-vcvt.cc",
        "test/vcvt-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vlrelu_test",
    srcs = [
        "test/qu8-vlrelu.cc",
        "test/vlrelu-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vmul_minmax_fp32_test",
    srcs = [
        "test/qu8-vmul-minmax-fp32.cc",
        "test/vmul-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vmul_minmax_rndnu_test",
    srcs = [
        "test/qu8-vmul-minmax-rndnu.cc",
        "test/vmul-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vmulc_minmax_fp32_test",
    srcs = [
        "test/qu8-vmulc-minmax-fp32.cc",
        "test/vmulc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "qu8_vmulc_minmax_rndnu_test",
    srcs = [
        "test/qu8-vmulc-minmax-rndnu.cc",
        "test/vmulc-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "s16_rmaxabs_test",
    srcs = [
        "test/rmaxabs-microkernel-tester.h",
        "test/s16-rmaxabs.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "s16_window_test",
    srcs = [
        "test/s16-window.cc",
        "test/window-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u32_filterbank_accumulate_test",
    srcs = [
        "test/filterbank-accumulate-microkernel-tester.h",
        "test/u32-filterbank-accumulate.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u32_filterbank_subtract_test",
    srcs = [
        "test/filterbank-subtract-microkernel-tester.h",
        "test/u32-filterbank-subtract.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u32_vlog_test",
    srcs = [
        "test/u32-vlog.cc",
        "test/vlog-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "i16_vlshift_test",
    srcs = [
        "test/i16-vlshift.cc",
        "test/vlshift-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "cs16_vsquareabs_test",
    srcs = [
        "test/cs16-vsquareabs.cc",
        "test/vsquareabs-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "cs16_bfly4_test",
    srcs = [
        "test/bfly4-microkernel-tester.h",
        "test/cs16-bfly4.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "cs16_fftr_test",
    srcs = [
        "test/cs16-fftr.cc",
        "test/fftr-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "s8_ibilinear_test",
    srcs = [
        "test/ibilinear-microkernel-tester.h",
        "test/s8-ibilinear.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "s8_maxpool_minmax_test",
    srcs = [
        "test/maxpool-microkernel-tester.h",
        "test/s8-maxpool-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "s8_vclamp_test",
    srcs = [
        "test/s8-vclamp.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u8_ibilinear_test",
    srcs = [
        "test/ibilinear-microkernel-tester.h",
        "test/u8-ibilinear.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u8_lut32norm_test",
    srcs = [
        "test/lut-norm-microkernel-tester.h",
        "test/u8-lut32norm.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u8_maxpool_minmax_test",
    srcs = [
        "test/maxpool-microkernel-tester.h",
        "test/u8-maxpool-minmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u8_rmax_test",
    srcs = [
        "test/rmax-microkernel-tester.h",
        "test/u8-rmax.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u8_vclamp_test",
    srcs = [
        "test/u8-vclamp.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "u64_u32_vsqrtshift_test",
    srcs = [
        "test/u64-u32-vsqrtshift.cc",
        "test/vunary-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x8_lut_test",
    srcs = [
        "test/lut-microkernel-tester.h",
        "test/x8-lut.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x8_zip_test",
    srcs = [
        "test/x8-zip.cc",
        "test/zip-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x32_packb_test",
    srcs = [
        "test/packb-microkernel-tester.h",
        "test/x32-packb.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "x16_packw_test",
    srcs = [
        "test/packw-microkernel-tester.h",
        "test/x16-packw.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "x32_packw_test",
    srcs = [
        "test/packw-microkernel-tester.h",
        "test/x32-packw.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "x32_packx_test",
    srcs = [
        "test/pack-microkernel-tester.h",
        "test/x32-packx.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x8_transpose_test",
    srcs = [
        "test/transpose-microkernel-tester.h",
        "test/x8-transpose.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x16_transpose_test",
    srcs = [
        "test/transpose-microkernel-tester.h",
        "test/x16-transpose.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x24_transpose_test",
    srcs = [
        "test/transpose-microkernel-tester.h",
        "test/x24-transpose.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x32_transpose_test",
    srcs = [
        "test/transpose-microkernel-tester.h",
        "test/x32-transpose.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x64_transpose_test",
    srcs = [
        "test/transpose-microkernel-tester.h",
        "test/x64-transpose.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "xx_transpose_test",
    srcs = [
        "test/transpose-microkernel-tester.h",
        "test/xx-transpose.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x32_unpool_test",
    srcs = [
        "test/unpool-microkernel-tester.h",
        "test/x32-unpool.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "x32_zerob_test",
    srcs = [
        "test/packb-microkernel-tester.h",
        "test/x32-zerob.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":packing",
    ],
)

xnnpack_unit_test(
    name = "x32_zip_test",
    srcs = [
        "test/x32-zip.cc",
        "test/zip-microkernel-tester.h",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "xx_fill_test",
    srcs = [
        "test/fill-microkernel-tester.h",
        "test/xx-fill.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

xnnpack_unit_test(
    name = "xx_pad_test",
    srcs = [
        "test/pad-microkernel-tester.h",
        "test/xx-pad.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS,
)

########################## Size tests for the library #########################

xnnpack_binary(
    name = "operator_size_test",
    srcs = ["test/operator-size.c"],
    deps = [":xnnpack_for_tfjs"],
)

xnnpack_binary(
    name = "subgraph_size_test",
    srcs = ["test/subgraph-size.c"],
    deps = [
        ":XNNPACK",
    ],
)

########################### Unit tests for operators ##########################

xnnpack_unit_test(
    name = "abs_nc_test",
    srcs = [
        "test/abs-nc.cc",
        "test/abs-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "abs_nc_eager_test",
    srcs = [
        "test/abs-nc-eager.cc",
        "test/abs-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "add_nd_test",
    timeout = "moderate",
    srcs = [
        "test/add-nd.cc",
        "test/binary-elementwise-operator-tester.h",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "add_nd_eager_test",
    timeout = "moderate",
    srcs = [
        "test/add-nd-eager.cc",
        "test/binary-elementwise-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "argmax_pooling_nhwc_test",
    srcs = [
        "test/argmax-pooling-nhwc.cc",
        "test/argmax-pooling-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "average_pooling_nhwc_test",
    srcs = [
        "test/average-pooling-nhwc.cc",
        "test/average-pooling-operator-tester.h",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "bankers_rounding_nc_test",
    srcs = [
        "test/bankers-rounding-nc.cc",
        "test/bankers-rounding-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "bankers_rounding_nc_eager_test",
    srcs = [
        "test/bankers-rounding-nc-eager.cc",
        "test/bankers-rounding-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "ceiling_nc_test",
    srcs = [
        "test/ceiling-nc.cc",
        "test/ceiling-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "ceiling_nc_eager_test",
    srcs = [
        "test/ceiling-nc-eager.cc",
        "test/ceiling-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "channel_shuffle_nc_test",
    srcs = [
        "test/channel-shuffle-nc.cc",
        "test/channel-shuffle-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "clamp_nc_test",
    srcs = [
        "test/clamp-nc.cc",
        "test/clamp-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "clamp_nc_eager_test",
    srcs = [
        "test/clamp-nc-eager.cc",
        "test/clamp-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "constant_pad_nd_test",
    srcs = [
        "test/constant-pad-nd.cc",
        "test/constant-pad-operator-tester.h",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "constant_pad_nd_eager_test",
    srcs = [
        "test/constant-pad-nd-eager.cc",
        "test/constant-pad-operator-tester.h",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "convert_nc_test",
    srcs = [
        "test/convert-nc.cc",
        "test/convert-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "convert_nc_eager_test",
    srcs = [
        "test/convert-nc-eager.cc",
        "test/convert-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS + [":math"],
)

xnnpack_unit_test(
    name = "convolution_nhwc_test",
    timeout = "moderate",
    srcs = [
        "test/convolution-nhwc.cc",
        "test/convolution-operator-tester.h",
    ],
    shard_count = 10,
    deps = OPERATOR_TEST_DEPS + [
        ":convolution_test_helpers",
    ],
)

xnnpack_unit_test(
    name = "convolution_nchw_test",
    timeout = "moderate",
    srcs = [
        "test/convolution-nchw.cc",
        "test/convolution-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS + [
        ":convolution_test_helpers",
    ],
)

xnnpack_unit_test(
    name = "copy_nc_test",
    srcs = [
        "test/copy-nc.cc",
        "test/copy-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "copy_nc_eager_test",
    srcs = [
        "test/copy-nc-eager.cc",
        "test/copy-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "deconvolution_nhwc_test",
    timeout = "moderate",
    srcs = [
        "test/deconvolution-nhwc.cc",
        "test/deconvolution-operator-tester.h",
    ],
    shard_count = 10,
    deps = OPERATOR_TEST_DEPS + [
        ":convolution_test_helpers",
    ],
)

xnnpack_unit_test(
    name = "depth_to_space_nchw2nhwc_test",
    srcs = [
        "test/depth-to-space-nchw2nhwc.cc",
        "test/depth-to-space-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "depth_to_space_nhwc_test",
    srcs = [
        "test/depth-to-space-nhwc.cc",
        "test/depth-to-space-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "divide_nd_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/divide-nd.cc",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "divide_nd_eager_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/divide-nd-eager.cc",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "dynamic_fully_connected_nc_test",
    srcs = [
        "test/dynamic-fully-connected-nc.cc",
        "test/dynamic-fully-connected-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "elu_nc_test",
    srcs = [
        "test/elu-nc.cc",
        "test/elu-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "elu_nc_eager_test",
    srcs = [
        "test/elu-nc-eager.cc",
        "test/elu-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "fully_connected_nc_test",
    srcs = [
        "test/fully-connected-nc.cc",
        "test/fully-connected-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "floor_nc_test",
    srcs = [
        "test/floor-nc.cc",
        "test/floor-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "floor_nc_eager_test",
    srcs = [
        "test/floor-nc-eager.cc",
        "test/floor-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "global_average_pooling_nwc_test",
    srcs = [
        "test/global-average-pooling-nwc.cc",
        "test/global-average-pooling-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "global_average_pooling_ncw_test",
    srcs = [
        "test/global-average-pooling-ncw.cc",
        "test/global-average-pooling-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "global_sum_pooling_nwc_test",
    srcs = [
        "test/global-sum-pooling-nwc.cc",
        "test/global-sum-pooling-operator-tester.h",
    ],
    shard_count = 10,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "hardswish_nc_test",
    srcs = [
        "test/hardswish-nc.cc",
        "test/hardswish-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "hardswish_nc_eager_test",
    srcs = [
        "test/hardswish-nc-eager.cc",
        "test/hardswish-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "leaky_relu_nc_test",
    srcs = [
        "test/leaky-relu-nc.cc",
        "test/leaky-relu-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "leaky_relu_nc_eager_test",
    srcs = [
        "test/leaky-relu-nc-eager.cc",
        "test/leaky-relu-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "max_pooling_nhwc_test",
    timeout = "moderate",
    srcs = [
        "test/max-pooling-nhwc.cc",
        "test/max-pooling-operator-tester.h",
    ],
    shard_count = 10,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "maximum_nd_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/maximum-nd.cc",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "maximum_nd_eager_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/maximum-nd-eager.cc",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "minimum_nd_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/minimum-nd.cc",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "minimum_nd_eager_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/minimum-nd-eager.cc",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "multiply_nd_test",
    timeout = "moderate",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/multiply-nd.cc",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "multiply_nd_eager_test",
    timeout = "moderate",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/multiply-nd-eager.cc",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "negate_nc_test",
    srcs = [
        "test/negate-nc.cc",
        "test/negate-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "negate_nc_eager_test",
    srcs = [
        "test/negate-nc-eager.cc",
        "test/negate-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "slice_normalization_test",
    srcs = [
        "test/slice-normalization.cc",
        "test/slice-normalization-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "transpose_normalization_test",
    srcs = [
        "test/transpose-normalization.cc",
        "test/transpose-normalization-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "prelu_nc_test",
    srcs = [
        "test/prelu-nc.cc",
        "test/prelu-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "resize_bilinear_nhwc_test",
    srcs = [
        "test/resize-bilinear-nhwc.cc",
        "test/resize-bilinear-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "resize_bilinear_nchw_test",
    srcs = [
        "test/resize-bilinear-nchw.cc",
        "test/resize-bilinear-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "sigmoid_nc_test",
    srcs = [
        "test/sigmoid-nc.cc",
        "test/sigmoid-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "sigmoid_nc_eager_test",
    srcs = [
        "test/sigmoid-nc-eager.cc",
        "test/sigmoid-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "slice_nd_test",
    timeout = "moderate",
    srcs = [
        "test/slice-nd.cc",
        "test/slice-operator-tester.h",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "slice_nd_eager_test",
    timeout = "moderate",
    srcs = [
        "test/slice-nd-eager.cc",
        "test/slice-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "softmax_nc_test",
    srcs = [
        "test/softmax-nc.cc",
        "test/softmax-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "space_to_depth_nhwc_test",
    srcs = [
        "test/space-to-depth-nhwc.cc",
        "test/space-to-depth-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "square_nc_test",
    srcs = [
        "test/square-nc.cc",
        "test/square-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "square_nc_eager_test",
    srcs = [
        "test/square-nc-eager.cc",
        "test/square-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "square_root_nc_test",
    srcs = [
        "test/square-root-nc.cc",
        "test/square-root-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "square_root_nc_eager_test",
    srcs = [
        "test/square-root-nc-eager.cc",
        "test/square-root-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "squared_difference_nd_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/squared-difference-nd.cc",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "squared_difference_nd_eager_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/squared-difference-nd-eager.cc",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "subtract_nd_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/subtract-nd.cc",
    ],
    shard_count = 10,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "subtract_nd_eager_test",
    srcs = [
        "test/binary-elementwise-operator-tester.h",
        "test/subtract-nd-eager.cc",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "tanh_nc_test",
    srcs = [
        "test/tanh-nc.cc",
        "test/tanh-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "tanh_nc_eager_test",
    srcs = [
        "test/tanh-nc-eager.cc",
        "test/tanh-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "transpose_nd_test",
    srcs = [
        "test/transpose-nd.cc",
        "test/transpose-operator-tester.h",
    ],
    shard_count = 10,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "transpose_nd_eager_test",
    srcs = [
        "test/transpose-nd-eager.cc",
        "test/transpose-operator-tester.h",
    ],
    shard_count = 5,
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "truncation_nc_test",
    srcs = [
        "test/truncation-nc.cc",
        "test/truncation-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "truncation_nc_eager_test",
    srcs = [
        "test/truncation-nc-eager.cc",
        "test/truncation-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

xnnpack_unit_test(
    name = "unpooling_nhwc_test",
    srcs = [
        "test/unpooling-nhwc.cc",
        "test/unpooling-operator-tester.h",
    ],
    deps = OPERATOR_TEST_DEPS,
)

########################### Unit tests for subgraph ###########################

xnnpack_cc_library(
    name = "convolution_test_helpers",
    testonly = True,
    srcs = [
        "test/convolution-test-helpers.cc",
    ],
    hdrs = [
        "test/convolution-test-helpers.h",
    ],
)

xnnpack_cc_library(
    name = "subgraph_unary_tester",
    testonly = True,
    hdrs = [
        "test/subgraph-unary-tester.h",
    ],
    deps = [
        ":node_type",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
        ":xnnpack_h",
        "@com_google_googletest//:gtest_main",
    ],
)

xnnpack_cc_library(
    name = "subgraph_binary_tester",
    testonly = True,
    hdrs = [
        "test/subgraph-binary-tester.h",
    ],
    deps = [
        ":node_type",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
        ":xnnpack_h",
        "@com_google_googletest//:gtest_main",
    ],
)

xnnpack_unit_test(
    name = "workspace_test",
    srcs = [
        "test/workspace.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":math",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "abs_test",
    srcs = [
        "test/abs.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "add2_test",
    srcs = [
        "test/add2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "argmax_pooling_2d_test",
    srcs = [
        "test/argmax-pooling-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "average_pooling_2d_test",
    srcs = [
        "test/average-pooling-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operator_utils",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "bankers_rounding_test",
    srcs = [
        "test/bankers-rounding.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "ceiling_test",
    srcs = [
        "test/ceiling.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "clamp_test",
    srcs = [
        "test/clamp.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "concatenate2_test",
    srcs = [
        "test/concatenate2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "concatenate3_test",
    srcs = [
        "test/concatenate3.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "concatenate4_test",
    srcs = [
        "test/concatenate4.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "convert_test",
    srcs = [
        "test/convert.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "convolution_2d_test",
    srcs = [
        "test/convolution-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":convolution_test_helpers",
        ":operator_utils",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "copy_test",
    srcs = [
        "test/copy.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "deconvolution_2d_test",
    timeout = "moderate",
    srcs = [
        "test/deconvolution-2d.cc",
    ],
    shard_count = 5,
    deps = [
        ":XNNPACK_test_mode",
        ":operator_utils",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "depth_to_space_test",
    srcs = [
        "test/depth-to-space.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "depthwise_convolution_2d_test",
    srcs = [
        "test/depthwise-convolution-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":convolution_test_helpers",
        ":operator_utils",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "divide2_test",
    srcs = [
        "test/divide2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "elu_test",
    srcs = [
        "test/elu.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "even_split2_test",
    srcs = [
        "test/even-split2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "even_split3_test",
    srcs = [
        "test/even-split3.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "even_split4_test",
    srcs = [
        "test/even-split4.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "floor_test",
    srcs = [
        "test/floor.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "fully_connected_test",
    srcs = [
        "test/fully-connected.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "global_average_pooling_1d_test",
    srcs = [
        "test/global-average-pooling-1d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "global_average_pooling_2d_test",
    srcs = [
        "test/global-average-pooling-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "global_sum_pooling_1d_test",
    srcs = [
        "test/global-sum-pooling-1d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "global_sum_pooling_2d_test",
    srcs = [
        "test/global-sum-pooling-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "hardswish_test",
    srcs = [
        "test/hardswish.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "leaky_relu_test",
    srcs = [
        "test/leaky-relu.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "max_pooling_2d_test",
    srcs = [
        "test/max-pooling-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operator_utils",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "maximum2_test",
    srcs = [
        "test/maximum2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "minimum2_test",
    srcs = [
        "test/minimum2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "multiply2_test",
    srcs = [
        "test/multiply2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "negate_test",
    srcs = [
        "test/negate.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "prelu_test",
    srcs = [
        "test/prelu.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "sigmoid_test",
    srcs = [
        "test/sigmoid.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "softmax_test",
    srcs = [
        "test/softmax.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "space_to_depth_2d_test",
    srcs = [
        "test/space-to-depth-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "square_test",
    srcs = [
        "test/square.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "square_root_test",
    srcs = [
        "test/square-root.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "squared_difference_test",
    srcs = [
        "test/squared-difference.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "static_constant_pad_test",
    srcs = [
        "test/static-constant-pad.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
        "@FP16",
    ],
)

xnnpack_unit_test(
    name = "static_reshape_test",
    srcs = [
        "test/static-reshape.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "static_resize_bilinear_2d_test",
    srcs = [
        "test/static-resize-bilinear-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "static_slice_test",
    srcs = [
        "test/static-slice.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "static_transpose_test",
    srcs = [
        "test/static-transpose.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "subtract2_test",
    srcs = [
        "test/subtract2.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_binary_tester",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "tanh_test",
    srcs = [
        "test/tanh.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operators_test_mode",
        ":subgraph_test_mode",
        ":subgraph_unary_tester",
    ],
)

xnnpack_unit_test(
    name = "unpooling_2d_test",
    srcs = [
        "test/unpooling-2d.cc",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":node_type",
        ":operator_utils",
        ":operators_test_mode",
        ":requantization",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "fusion_test",
    srcs = [
        "test/fusion.cc",
        "test/runtime-tester.h",
        "test/subgraph-tester.h",
    ],
    deps = [
        ":XNNPACK_test_mode",
        ":subgraph_test_mode",
    ],
)

############################### Misc unit tests ###############################

xnnpack_unit_test(
    name = "subgraph_test",
    srcs = [
        "test/runtime-tester.h",
        "test/subgraph.cc",
        "test/subgraph-tester.h",
    ],
    deps = [
        ":XNNPACK",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "memory_planner_test",
    srcs = [
        "test/memory-planner-test.cc",
        "test/runtime-tester.h",
        "test/subgraph-tester.h",
    ],
    deps = [
        ":XNNPACK",
        ":math",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "subgraph_nchw_test",
    srcs = [
        "test/subgraph-nchw.cc",
        "test/subgraph-tester.h",
    ],
    deps = [
        ":XNNPACK",
        ":subgraph_test_mode",
    ],
)

xnnpack_unit_test(
    name = "subgraph_fp16_test",
    srcs = [
        "test/mock-allocator.h",
        "test/subgraph-fp16.cc",
        "test/subgraph-tester.h",
    ],
    deps = [
        ":XNNPACK",
        ":allocator",
        ":node_type",
        ":subgraph_test_mode",
        "@FP16",
    ],
)

xnnpack_unit_test(
    name = "jit_test",
    srcs = [
        "test/jit.cc",
    ],
    deps = [
        ":common",
        ":jit_test_mode",
        ":memory",
    ],
)

xnnpack_unit_test(
    name = "aarch32_assembler_test",
    srcs = [
        "test/aarch32-assembler.cc",
        "test/assembler-helpers.h",
    ],
    deps = [
        ":common",
        ":jit_test_mode",
        ":memory",
        ":microparams",
        ":microparams_init",
    ],
)

xnnpack_unit_test(
    name = "aarch64_assembler_test",
    srcs = [
        "test/aarch64-assembler.cc",
        "test/assembler-helpers.h",
    ],
    deps = [
        ":common",
        ":jit_test_mode",
        ":memory",
        ":microparams",
        ":microparams_init",
    ],
)

xnnpack_unit_test(
    name = "code_cache_test",
    srcs = ["test/code-cache.cc"],
    deps = [
        ":XNNPACK",
        ":cache",
    ],
)

xnnpack_unit_test(
    name = "weights_cache_test",
    srcs = ["test/weights-cache.cc"],
    deps = [
        ":XNNPACK",
        ":cache",
        ":common",
    ],
)

xnnpack_unit_test(
    name = "mutex_test",
    srcs = ["test/mutex.cc"],
    deps = [
        ":common",
        ":mutex_test_mode",
        ":xnnpack_h",
    ],
)

xnnpack_unit_test(
    name = "microkernel_utils_test",
    srcs = ["test/microkernel-utils.cc"],
    deps = [
        ":common",
        ":microkernel_utils",
        ":params",
    ],
)

xnnpack_unit_test(
    name = "operator_utils_test",
    srcs = ["test/operator-utils.cc"],
    deps = [
        ":common",
        ":operator_utils",
        ":operators_test_mode",
        ":params",
    ],
)

xnnpack_unit_test(
    name = "packing_test",
    srcs = [
        "test/packing.cc",
    ],
    deps = MICROKERNEL_TEST_DEPS + [
        ":microkernel_utils",
        ":operator_utils",
        ":packing_test_mode",
    ],
)

xnnpack_unit_test(
    name = "indirection_test",
    srcs = [
        "test/indirection.cc",
    ],
    deps = [
        ":allocator",
        ":indirection_test_mode",
        ":operator_utils",
        ":operators_test_mode",
        ":xnnpack_h",
    ],
)

############################# Build configurations #############################

# Enables usage of ARM FP16 (FP16 arithmetics) scalar kernels.
config_setting(
    name = "xnn_enable_arm_fp16_scalar_explicit_true",
    define_values = {"xnn_enable_arm_fp16_scalar": "true"},
)

# Disables usage of ARM FP16 (FP16 arithmetics) scalar kernels.
config_setting(
    name = "xnn_enable_arm_fp16_scalar_explicit_false",
    define_values = {"xnn_enable_arm_fp16_scalar": "false"},
)

# Enables usage of ARM FP16 (FP16 arithmetics) vector kernels.
config_setting(
    name = "xnn_enable_arm_fp16_vector_explicit_true",
    define_values = {"xnn_enable_arm_fp16_vector": "true"},
)

# Disables usage of ARM FP16 (FP16 arithmetics) vector kernels.
config_setting(
    name = "xnn_enable_arm_fp16_vector_explicit_false",
    define_values = {"xnn_enable_arm_fp16_vector": "false"},
)

# Enables usage of ARM BF16 (BF16 arithmetics) kernels.
config_setting(
    name = "xnn_enable_arm_bf16_explicit_true",
    define_values = {"xnn_enable_arm_bf16": "true"},
)

# Disables usage of ARM BF16 (BF16 arithmetics) kernels.
config_setting(
    name = "xnn_enable_arm_bf16_explicit_false",
    define_values = {"xnn_enable_arm_bf16": "false"},
)

# Enables usage of ARM DotProd (integer dot product) kernels.
config_setting(
    name = "xnn_enable_arm_dotprod_explicit_true",
    define_values = {"xnn_enable_arm_dotprod": "true"},
)

# Disables usage of ARM DotProd (integer dot product) kernels.
config_setting(
    name = "xnn_enable_arm_dotprod_explicit_false",
    define_values = {"xnn_enable_arm_dotprod": "false"},
)

# Enables usage of RISC-V Vector kernels.
config_setting(
    name = "xnn_enable_riscv_vector_explicit_true",
    define_values = {"xnn_enable_riscv_vector": "true"},
)

# Disables usage of RISC-V Vector kernels.
config_setting(
    name = "xnn_enable_riscv_vector_explicit_false",
    define_values = {"xnn_enable_riscv_vector": "false"},
)

# Enables usage of assembly kernels.
config_setting(
    name = "xnn_enable_assembly_explicit_true",
    define_values = {"xnn_enable_assembly": "true"},
)

# Disables usage of assembly kernels.
config_setting(
    name = "xnn_enable_assembly_explicit_false",
    define_values = {"xnn_enable_assembly": "false"},
)

# Enables usage of sparse inference.
config_setting(
    name = "xnn_enable_sparse_explicit_true",
    define_values = {"xnn_enable_sparse": "true"},
)

# Disables usage of sparse inference.
config_setting(
    name = "xnn_enable_sparse_explicit_false",
    define_values = {"xnn_enable_sparse": "false"},
)

# Disables usage of HMP-aware optimizations.
config_setting(
    name = "xnn_enable_hmp_explicit_false",
    define_values = {"xnn_enable_hmp": "false"},
)

# Enable usage of optimized memory allocation
config_setting(
    name = "xnn_enable_memopt_explicit_true",
    define_values = {"xnn_enable_memopt": "true"},
)

# Disable usage of optimized memory allocation
config_setting(
    name = "xnn_enable_memopt_explicit_false",
    define_values = {"xnn_enable_memopt": "false"},
)

# Enable QS8 inference in TFLite-specific version
config_setting(
    name = "xnn_enable_qs8_explicit_true",
    define_values = {"xnn_enable_qs8": "true"},
)

# Disable QS8 inference in TFLite-specific version
config_setting(
    name = "xnn_enable_qs8_explicit_false",
    define_values = {"xnn_enable_qs8": "false"},
)

# Enable QU8 inference in TFLite-specific version
config_setting(
    name = "xnn_enable_qu8_explicit_true",
    define_values = {"xnn_enable_qu8": "true"},
)

# Disable QU8 inference in TFLite-specific version
config_setting(
    name = "xnn_enable_qu8_explicit_false",
    define_values = {"xnn_enable_qu8": "false"},
)

# Enables usage of JIT kernels.
config_setting(
    name = "xnn_enable_jit_explicit_true",
    define_values = {"xnn_enable_jit": "true"},
)

# Disables usage of JIT kernels.
config_setting(
    name = "xnn_enable_jit_explicit_false",
    define_values = {"xnn_enable_jit": "false"},
)

# Enables usage of mr heuristic to select microkernels.
config_setting(
    name = "xnn_enable_gemm_m_specialization_explicit_true",
    define_values = {"xnn_enable_gemm_m_specialization": "true"},
)

# Disables usage of mr heuristic to select microkernels.
config_setting(
    name = "xnn_enable_gemm_m_specialization_explicit_false",
    define_values = {"xnn_enable_gemm_m_specialization": "false"},
)

# Enables usage of DWCONV multipass kernels.
config_setting(
    name = "xnn_enable_dwconv_multipass_explicit_true",
    define_values = {"xnn_enable_dwconv_multipass": "true"},
)

# Disables usage of DWCONV multipass kernels.
config_setting(
    name = "xnn_enable_dwconv_multipass_explicit_false",
    define_values = {"xnn_enable_dwconv_multipass": "false"},
)

# Force logging to stderr/stdout
config_setting(
    name = "xnn_log_to_stdio_explicit_true",
    define_values = {"xnn_log_to_stdio": "true"},
)

# Fully disable logging
config_setting(
    name = "xnn_log_level_explicit_none",
    define_values = {"xnn_log_level": "none"},
)

# Log fatal errors only
config_setting(
    name = "xnn_log_level_explicit_fatal",
    define_values = {"xnn_log_level": "fatal"},
)

# Log fatal and non-fatal errors
config_setting(
    name = "xnn_log_level_explicit_error",
    define_values = {"xnn_log_level": "error"},
)

# Log warnings and errors
config_setting(
    name = "xnn_log_level_explicit_warning",
    define_values = {"xnn_log_level": "warning"},
)

# Log information messages, warnings and errors
config_setting(
    name = "xnn_log_level_explicit_info",
    define_values = {"xnn_log_level": "info"},
)

# Log all messages, including debug messages
config_setting(
    name = "xnn_log_level_explicit_debug",
    define_values = {"xnn_log_level": "debug"},
)

config_setting(
    name = "xnn_platform_jit_explicit_true",
    define_values = {"xnn_platform_jit": "true"},
)

config_setting(
    name = "xnn_platform_jit_explicit_false",
    define_values = {"xnn_platform_jit": "false"},
)

# Builds with -c dbg
config_setting(
    name = "debug_build",
    values = {
        "compilation_mode": "dbg",
    },
)

# Builds with -c opt
config_setting(
    name = "optimized_build",
    values = {
        "compilation_mode": "opt",
    },
)

config_setting(
    name = "linux_arm64",
    values = {"cpu": "aarch64"},
)

config_setting(
    name = "linux_k8",
    values = {"cpu": "k8"},
)

config_setting(
    name = "linux_arm",
    values = {"cpu": "arm"},
)

config_setting(
    name = "linux_armeabi",
    values = {"cpu": "armeabi"},
)

config_setting(
    name = "linux_armhf",
    values = {"cpu": "armhf"},
)

config_setting(
    name = "linux_armv7a",
    values = {"cpu": "armv7a"},
)

config_setting(
    name = "linux_riscv64",
    values = {"cpu": "riscv64"},
)

config_setting(
    name = "android",
    values = {"crosstool_top": "//external:android/crosstool"},
)

config_setting(
    name = "android_armv7",
    values = {
        "crosstool_top": "//external:android/crosstool",
        "cpu": "armeabi-v7a",
    },
)

config_setting(
    name = "android_arm64",
    values = {
        "crosstool_top": "//external:android/crosstool",
        "cpu": "arm64-v8a",
    },
)

config_setting(
    name = "android_x86",
    values = {
        "crosstool_top": "//external:android/crosstool",
        "cpu": "x86",
    },
)

config_setting(
    name = "android_x86_64",
    values = {
        "crosstool_top": "//external:android/crosstool",
        "cpu": "x86_64",
    },
)

config_setting(
    name = "windows_x86_64",
    values = {"cpu": "x64_windows"},
)

config_setting(
    name = "windows_x86_64_clang",
    values = {
        "compiler": "clang-cl",
        "cpu": "x64_windows",
    },
)

config_setting(
    name = "windows_x86_64_mingw",
    values = {
        "compiler": "mingw-gcc",
        "cpu": "x64_windows",
    },
)

config_setting(
    name = "windows_x86_64_msys",
    values = {
        "compiler": "msys-gcc",
        "cpu": "x64_windows",
    },
)

config_setting(
    name = "macos_x86_64",
    values = {
        "apple_platform_type": "macos",
        "cpu": "darwin",
    },
)

config_setting(
    name = "macos_arm64",
    values = {
        "apple_platform_type": "macos",
        "cpu": "darwin_arm64",
    },
)

config_setting(
    name = "emscripten",
    values = {"crosstool_top": "@emsdk//emscripten_toolchain:everything"},
)

config_setting(
    name = "emscripten_wasm",
    values = {
        "crosstool_top": "@emsdk//emscripten_toolchain:everything",
        "cpu": "wasm",
    },
)

config_setting(
    name = "emscripten_wasmsimd",
    values = {
        "crosstool_top": "@emsdk//emscripten_toolchain:everything",
        "cpu": "wasm",
        "features": "wasm_simd",
    },
)

config_setting(
    name = "emscripten_wasmrelaxedsimd",
    values = {
        "crosstool_top": "@emsdk//emscripten_toolchain:everything",
        "cpu": "wasm",
        "features": "wasm_relaxed_simd",
    },
)

config_setting(
    name = "ios_arm64",
    values = {
        "apple_platform_type": "ios",
        "cpu": "ios_arm64",
    },
)

config_setting(
    name = "ios_arm64e",
    values = {
        "apple_platform_type": "ios",
        "cpu": "ios_arm64e",
    },
)

config_setting(
    name = "ios_sim_arm64",
    values = {
        "apple_platform_type": "ios",
        "cpu": "ios_sim_arm64",
    },
)

config_setting(
    name = "ios_x86_64",
    values = {
        "apple_platform_type": "ios",
        "cpu": "ios_x86_64",
    },
)

config_setting(
    name = "watchos_arm64_32",
    values = {
        "apple_platform_type": "watchos",
        "cpu": "watchos_arm64_32",
    },
)

config_setting(
    name = "watchos_x86_64",
    values = {
        "apple_platform_type": "watchos",
        "cpu": "watchos_x86_64",
    },
)

config_setting(
    name = "tvos_arm64",
    values = {
        "apple_platform_type": "tvos",
        "cpu": "tvos_arm64",
    },
)

config_setting(
    name = "tvos_x86_64",
    values = {
        "apple_platform_type": "tvos",
        "cpu": "tvos_x86_64",
    },
)

######################## Composite build configurations #######################

selects.config_setting_group(
    name = "aarch32",
    match_any = [
        ":android_armv7",
        ":linux_arm",
        ":linux_armeabi",
        ":linux_armhf",
        ":linux_armv7a",
    ],
)

selects.config_setting_group(
    name = "aarch64",
    match_any = [
        ":android_arm64",
        ":ios_arm64",
        ":ios_arm64e",
        ":ios_sim_arm64",
        ":linux_arm64",
        ":macos_arm64",
        ":tvos_arm64",
        ":watchos_arm64_32",
    ],
)

selects.config_setting_group(
    name = "x86",
    match_any = [
        ":android_x86",
        ":android_x86_64",
        ":ios_x86_64",
        ":linux_k8",
        ":macos_x86_64",
        ":tvos_x86_64",
        ":watchos_x86_64",
        ":windows_x86_64",
        ":windows_x86_64_clang",
        ":windows_x86_64_mingw",
        ":windows_x86_64_msys",
    ],
)

selects.config_setting_group(
    name = "riscv",
    match_any = [":linux_riscv64"],
)

selects.config_setting_group(
    name = "arm_fp16_scalar_enabled_by_default",
    match_any = [
        ":aarch32",
        ":aarch64",
    ],
)

selects.config_setting_group(
    name = "arm_fp16_vector_enabled_by_default",
    match_any = [
        ":aarch32",
        ":aarch64",
    ],
)

alias(
    name = "arm_fp16_scalar_enabled",
    actual = select({
        ":xnn_enable_arm_fp16_scalar_explicit_true": ":xnn_enable_arm_fp16_scalar_explicit_true",
        ":xnn_enable_arm_fp16_scalar_explicit_false": ":xnn_enable_arm_fp16_scalar_explicit_true",
        "//conditions:default": ":arm_fp16_scalar_enabled_by_default",
    }),
)

alias(
    name = "arm_fp16_vector_enabled",
    actual = select({
        ":xnn_enable_arm_fp16_vector_explicit_true": ":xnn_enable_arm_fp16_vector_explicit_true",
        ":xnn_enable_arm_fp16_vector_explicit_false": ":xnn_enable_arm_fp16_vector_explicit_true",
        "//conditions:default": ":arm_fp16_vector_enabled_by_default",
    }),
)

selects.config_setting_group(
    name = "arm_bf16_enabled_by_default",
    match_any = [
        ":aarch64",
    ],
)

alias(
    name = "arm_bf16_enabled",
    actual = select({
        ":xnn_enable_arm_bf16_explicit_true": ":xnn_enable_arm_bf16_explicit_true",
        ":xnn_enable_arm_bf16_explicit_false": ":xnn_enable_arm_bf16_explicit_true",
        "//conditions:default": ":arm_bf16_enabled_by_default",
    }),
)

selects.config_setting_group(
    name = "arm_dotprod_enabled_by_default",
    match_any = [
        ":aarch32",
        ":aarch64",
    ],
)

alias(
    name = "arm_dotprod_enabled",
    actual = select({
        ":xnn_enable_arm_dotprod_explicit_true": ":xnn_enable_arm_dotprod_explicit_true",
        ":xnn_enable_arm_dotprod_explicit_false": ":xnn_enable_arm_dotprod_explicit_true",
        "//conditions:default": ":arm_dotprod_enabled_by_default",
    }),
)

selects.config_setting_group(
    name = "riscv_vector_enabled_by_default",
    match_any = [
        ":riscv",
    ],
)

alias(
    name = "riscv_vector_enabled",
    actual = select({
        ":xnn_enable_riscv_vector_explicit_true": ":xnn_enable_riscv_vector_explicit_true",
        ":xnn_enable_riscv_vector_explicit_false": ":xnn_enable_riscv_vector_explicit_true",
        "//conditions:default": ":riscv_vector_enabled_by_default",
    }),
)

bzl_library(
    name = "build_defs_bzl",
    srcs = ["build_defs.bzl"],
    visibility = ["//visibility:private"],
)
